Announcement

Collapse
No announcement yet.

Callback Funktion einer C++ DLL in Delphi 6 nutzen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Callback Funktion einer C++ DLL in Delphi 6 nutzen

    Hallo,
    habe Probleme beim Aufruf einer C++ Dll, der eine Callback Funktion übergeben wird. Im C++ Beispiel Programm läuft alles einwandfrei. Versuche ich nun die Dll aus Delphi heraus anzusprechen wird die Function sms_senden ausgeführt, kehrt jedoch nicht mehr zurück und die Callback Procedure wird niemals angesprungen. Der Aufruf der Function dllversion hingegen funktioniert. Kann mir jemand sagen, ob ich die Deklarationen falsch angebe oder wo ansonsten der Fehler liegt.

    Danke im voraus...

    <PRE>
    *****************************************<BR>
    Beispiel C++<BR>
    *****************************************<BR>
    #include <stdio.h>
    #include <windows.h>
    typedef void (CALLBACK* LPFNDLLstatus)(int,char*);
    typedef char* (CALLBACK* LPFNDLLVersion)();
    typedef int (CALLBACK* LPFNDLLsms_senden)(char*,char*,char*,char*,LPFNDLL status);

    LPFNDLLVersion dllversion;
    LPFNDLLsms_senden sms_senden;

    void CALLBACK status(int i,char* str)
    {
    printf("%d %s\n",i,str);
    return;
    };
    int main( int argc, char *argv[ ], char *envp[ ] )
    {
    HINSTANCE dllhandle;
    printf("Senden\n");
    dllhandle = LoadLibrary("SMS_DLL.DLL");
    if (dllhandle != NULL)
    {
    dllversion = (LPFNDLLVersion)GetProcAddress(dllhandle,"dllversi on");
    sms_senden=(LPFNDLLsms_senden)GetProcAddress(dllha ndle,"sms_senden");
    if (!dllversion || !sms_senden)
    {
    FreeLibrary(dllhandle);
    return 2;
    }
    else
    {
    printf("Version: %s\n",dllversion());
    sms_senden("123456","001930100","012345678","Info" ,(LPFNDLLstatus)status);
    FreeLibrary(dllhandle);
    return 0;
    }
    }
    else
    return 1;
    }

    *****************************************<BR>
    Beispiel Delphi 6<BR>
    *****************************************<BR>
    function sms_senden(MSN: LPSTR; Provider: LPSTR; ToAddress: LPSTR;
    Text: LPSTR; Func: Pointer): integer; stdcall; external 'SMS_DLL.DLL';
    function dllversion: LPSTR: stdcall; external 'SMS_DLL.DLL';

    implementation

    procedure Status(StNum: integer; StMsg: LPSTR); stdcall;
    begin
    ...
    end;

    var
    Version: string;
    RetVal: integer;
    begin
    Version := dllversion;
    RetVal := sms_senden('123456','001930100','012345678','Info' ,@Status);
    ...
    end;

    </PRE>
Working...
X