Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
stefan_schnell
Active Contributor


A long time ago I presented here a possibility how to call DLL functions from a library of the presentation server inside ABAP.

Not so long ago I presented here the possibility how to use Windows PowerShell inside ABAP.

Here now a symbiosis, how to call DLL functions via PowerShell inside ABAP:
"-Begin-----------------------------------------------------------------
Program zCallDLL.

"-TypePools---------------------------------------------------------
Type-Pools OLE2 .

"-Constants---------------------------------------------------------
Constants CrLf(2) Type c Value %_CR_LF.
Constants OUTPUT_CONSOLE Type i Value 0.
Constants OUTPUT_WINDOW Type i Value 1.
Constants OUTPUT_BUFFER Type i Value 2.

"-Variables---------------------------------------------------------
Data PS Type OLE2_OBJECT.
Data Result Type i Value 0.
Data strResult Type String Value ''.
Data tabResult Type Table Of String.
Data PSCode Type String Value ''.

"-Macros------------------------------------------------------------
Define _.
Concatenate PSCode &1 CrLf Into PSCode.
End-Of-Definition.

"-Main--------------------------------------------------------------
Create Object PS 'SAPIEN.ActiveXPoSH'.
If sy-subrc = 0 And PS-Handle <> 0 And PS-Type = 'OLE2'.

Call Method Of PS 'Init' = Result Exporting #1 = 0.
If Result = 0.

Call Method Of PS 'IsPowerShellInstalled' = Result.
If Result <> 0.
Set Property Of PS 'OutputMode' = OUTPUT_BUFFER.

_ '$sig = @"'.
_ '[DllImport("User32.dll")]'.
_ 'public static extern int MessageBoxA(int hWnd, String Text, String Caption, int Type);'.
_ '"@;'.
_ '$DLL_User32 = Add-Type PBexpMsgBox -MemberDefinition $sig -PassThru'.
_ '$DLL_User32::MessageBoxA(0, "Hello World", "From WinAPI", 0);'.

Call Method Of PS 'Execute' Exporting
#1 = PSCode.

Call Method Of PS 'OutputString' = strResult.

Split strResult At cl_abap_char_utilities=>cr_lf
Into Table tabResult.
Loop At tabResult Into strResult.
Write: / strResult.
EndLoop.

EndIf.

EndIf.

Free Object PS.

EndIf.

"-End-------------------------------------------------------------------

The example above shows the using of a WinAPI call.

9 Comments