Skip to Content
Technical Articles
Author's profile photo Stefan Schnell

How to Call DLL Functions Inside ABAP

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.

Assigned tags

      9 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Former Member
      Former Member

      GUI 7.30 is used as the first operation:

      --

      Create Object PS 'SAPIEN.ActiveXPoSH'.

      --

      causes an error => SY-SUBRC = 2. Provides that use the object SAPIEN.ActiveXPoSH?


      Author's profile photo Stefan Schnell
      Stefan Schnell
      Blog Post Author

      Hello Oleg TV,

      are you sure you install ActiveX PowerShell library correct?

      Do you try the VBS test program and runs it well?

      Cheers

      Stefan

      Author's profile photo Former Member
      Former Member

      Thank you, there was a problem with the installation ActiveX PowerShell library.

      Author's profile photo Hai Wang
      Hai Wang

      Thanks for sharing @Stefan Schnell ,  It will be great, if you also know Unix script in ABAP.

      Author's profile photo Stefan Schnell
      Stefan Schnell
      Blog Post Author

      Hello Hai Wang,

      the solution above is only for SAP GUI for Windows, I am no Unix expert but as far as I know SAP offers no special SAP GUI for Unix. Also Unix offers no equivalent to ActiveX, which is natively supported by the SAP GUI for Windows.

      One ot the ways I see is a server application, which runs on the presentation server, something like I describe here. So I think it is possible to build a bridge between an SAP ABAP application and Unix script.

      Maybe somewhere is an expert who can present a way.

      Cheers

      Stefan

      Author's profile photo John Appleby
      John Appleby

      Hi Stefan,

      There is only the Java SAPGui for UNIX systems. Mostly we use it for simple administration tasks on X-Windows.

      With Java you could in theory attach to other Jar files which you could run in-line with SAPGui but I don't think there is an API for this.

      Better to write a web app for all your needs, in most cases.

      John

      Author's profile photo Heberth Warley
      Heberth Warley

      ​Hi Stefan, I hope you going well. I’m research to the way to use a DLL in background mode. I’ve seen your post about the use in foreground mode and I'd like know if you had experience with the use in background mode too.

      Thanks ever so much

      Author's profile photo Stefan Schnell
      Stefan Schnell

      Hello Heberth Warley,

      that is a very interesting requirement.

      One way to realize this is an SAP server application which runs locally. I programmed a solution on this base five years ago, called Background Light. You can find more information here. In my opinion should a combination of Background Light and dotNETRunner meet your demands.

      Best regards
      Stefan

      Author's profile photo Heberth Warley
      Heberth Warley

      Hi Stefan Schnell

      This is a very useful tip. Thank you so much.

      Best regards