Announcement

Collapse
No announcement yet.

Parameterübergabe an DLL-Funktion

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

  • Parameterübergabe an DLL-Funktion

    Hi,

    ich möchte von meiner DLL einen Pointer auf eine Record-Struktur, welche in der DLL erzeugt wird und ich aus dem Hauptprogramm auf diese Record-Struktur zugreifen kann. Mein Problem ist, daß schon beim Aufruf der Funktion der Übergabeparameter nicht korrekt ankommt (steht in der DLL Müll drin). Bis zum Funktionsaufruf läuft alles in bester Ordnung.

    <PRE>
    procedure TFMain.LoadModules(Sender: TObject; var bCanRun: Boolean);
    type
    TGetModProc = function (BusTyp:Word): Pointer;
    var
    iModuleDLL: Integer;
    GetModProc: TGetModProc;
    PModulesA: TPTHwModules;
    begin
    iModuleDLL := LoadLib(SEMD_DLL_Txt);
    if iModuleDLL > 0 then
    begin
    @GetModProc := GetProc(iModuleDLL, 'GetModule');
    if Assigned(GetModProc) then
    begin
    PModulesA := GetModProc(TYPABUS);
    end;
    end
    else
    begin
    bCanRun := iModuleDLL > 0;
    end;
    end;
    </PRE>

    TYPABUS ist eine Konstante mit dem Wert 1. In der DLL kommt aber ein ganz anderer Wert an. In PModulesA sollte nachher die Adresse auf die Record-Struktur drinstehen.

    Kann mir hier jemand sagen, warum in der DLL der Übergabeparameter schrott ist?

    Martin

  • #2
    Bevor sich hier einige die unnötige Mühe nach der Fehlersuche machen: Hab den Bug selbst gefunden. Das Problem war die definition der Funktion in der DLL. Diese war fälschlicherweise als <b>sdtcall</b> definiert, was den verbogenen Übergabewert verursacht hat. Dadurch kam ich im Hauptprogramm auch an einer ganz anderen Rücksprungadresse raus.

    Marti

    Comment


    • #3
      Es ist besser umgekehrt vorzugehen, exportierte DLL Funktionen sollten immer <b>stdcall</b> sein. Ohne dieses werden Delphi Funktionen mit der Standardkonvention <b>register</b> erzeugt. Wobei dieses Aufrufkonvention nur Delphi spezifisch ist und keineswegs Standard ist.<br>

      Gruß Hage

      Comment

      Working...
      X