Announcement

Collapse
No announcement yet.

Wertübergabe aus C++

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

  • Wertübergabe aus C++

    Hallo ! <P><P>

    Ich habe eine Delphi-DLL die folgende Funktion enthält: <P><P>
    <P>
    procedure VCL_Mandant_setzen(Mandant: Integer);
    begin
    DM.DLL_Mandant := Mandant;
    end;
    </PRE>
    <P><P>Nun rufe ich aus meinem C++-Programm die Funktion folgendermassen auf:
    <P><P><P>
    typedef VCL_Mandant_setzen(unsigned int);<P>
    <P>
    void DLL_Mandant_setzen()<P>
    {<P>
    VCL_Mandant_setzen *pMandant_setzen;<P><P>

    if(hdll_DLL_Delphi)<P>
    { <P>
    pMandant_setzen = (VCL_Mandant_setzen*)GetProcAddress(hdll_DLL_Delph i, "VCL_Mandant_setzen");
    <P><P>
    if(pMandant_setzen)<P>
    pMandant_setzen(PSystem->Mandant);<P>
    }<P>
    }</PRE> <P><P>

    Wenn meine Variable PSystem->Mandant den Wert 1 hat, kommt aber 44166804 an ?????
    <P><P>
    Hat das mit den Datentypen zu tun ?
    <P><P>
    Danke<P>
    Gruss<P>
    Maik

  • #2
    Hallo Maik<p>
    Die Delphi-Variable Mandant hast du als integer definiert, d.h. die Variable kann auch negative Werte aufnehmen.<p>
    Deine C++-Variable hingegen ist ein unsigned int, eine Zahl ohne Vorzeichen also in Delphi ein Cardinal.<p>
    In Delphi kannst Du den Speicherbedarf einer Variable über die Funktion SizeOf(integer) == 4 ermitteln. Solch eine Funktion müsste auch in C++ definiert sein. Selbstverständlich müssen beide Seiten bezüglich ihres Speicherbedarfs die gleiche Grösse liefern.<p>
    Deklariere ferner beide Funktionen mit der Direktive stdcall, dies ist insbesondere bei Funktionen mit mehreren Aufrufparametern wichtig (betrifft Dich daher nur bei Parametererweiterung)!<p>
    Gruss Uw

    Comment


    • #3
      Selbst bei nur einem Parameter muss stdcall benutzt werden.<br>
      Sowohl bei Delphi als auch bei C++ ist die register calling convention der Default.<br&gt

      Comment

      Working...
      X