Hello community,
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.
Good DLL calling.
Cheers
Stefan