Announcement

Collapse
No announcement yet.

Übersetzung von Funktionsaufruf

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

  • Übersetzung von Funktionsaufruf

    Hallo,

    ich habe das Problem, das ich einen C-Funktionsaufruf aus einer DLL in Delphi nutzen möchte. Mir steht ein C-Beispiel zur Verfügung welches einwandfrei läuft. Ich habe das Ganze nach Delphi übersetzt, aber leider crashed das Ganze ohne plausible Fehlermeldung.
    Ich habe hier beides mal gekürzt und drangehängt. Vielleicht ist jemand so nett und schaut mal drüber wo mein Fehler in der Übersetzung liegt.

    <PRE>
    1. C-Code der läuft.
    ------------------------------------------------------
    typedef BOOL (*p_MyIn32)(unsigned short, unsigned short);
    p_MyIn32 MyIn32=NULL;

    .....
    .....
    .....
    .....

    hTT=GetModuleHandle(_T("My.dll"));
    .....
    .....
    .....
    .....
    MyIn32=(p_MyIn32)((ULONG)hTT+0xED10);
    .....
    MyIn32(T_My_COMMAND, MyBuffer[0]); // <<<< läuft
    <P>
    ------------------------------------------------------
    <P>
    2. Delphi-Code der nicht läuft. Der crash kommt in der letzten Zeile.
    ------------------------------------------------------
    <P>
    type TMyIn32 = function(Value1, Value2:smallint):boolean;cdecl;
    <P>
    var Handle: THandle;
    MyIn32 : TMyIn32;
    <P>
    Handle := LoadLibrary('My.dll');
    <P>
    @MyIn32:=Ptr(Handle+$ED10);
    <P>
    MyIn32(T_My_COMMAND, MyBuffer[0]); // <<<< das geht schief
    <P> <P>
    Danke im voraus !!!
    <P> <P>
    Gruss
    Stalle

  • #2
    Hallo,

    &gt;..@MyIn32:=Ptr(Handle+$ED10); ...

    normalerweise greift man auf die Win32-API-Funktion <b>GetProcAddress</b> zurück, um den Einsprungpunkt (Adresse) in eine von der DLL exportierte Schnittstellenprozedur zu ermitteln:
    <pre>
    ...
    hDLL := LoadLibrary('DLL_1.DLL');
    if hDLL <> 0 then begin
    @FSetDLLText := GetProcAddress(hDLL, 'SetDLLText');
    @FGetDLLText := GetProcAddress(hDLL, 'GetDLLText');
    if (Assigned(FSetDLLText) and
    Assigned(FGetDLLText)) then begin
    ...
    </pre>
    Was verbirgt sich hinter <i>MyBuffer[0]</i>

    Comment

    Working...
    X