Announcement

Collapse
No announcement yet.

Delphi DLL in C++ aufrufen

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

  • Delphi DLL in C++ aufrufen

    Hallo,

    ich habe eine kleine DLL in Delphi programmiert und möchte diese in C++ einbinden.
    <PRE>
    library DELPHI_DLL;

    uses sysutils;

    procedure Umdrehen(poi: PChar); stdcall;

    var
    i,n:integer;
    daten:array[1..1000]of char;
    zz:char;
    ss:string;

    begin
    i:=strlen(poi);
    fillchar(daten,sizeof(daten),#0);
    system.move(poi^,daten,i);
    ss:=copy(daten,1,i);
    for n:=1 to i do daten[n]:=ss[i+1-n];
    system.Move(daten[1], poi^, i);
    end;

    exports
    Umdrehen;

    begin

    end.
    </PRE>
    Wie kann ich die DLL in C++ aufrufen ?

    Gruß Georg

  • #2
    Hi!<br>
    Eigentlich funktioniert es so wie für die andern DLLs auch.<br>
    <br>
    Hier ein Beispiel:<br>

    <PRE>typedef char* UmdrehenDLL();
    AnsiString Umdrehen();
    </PRE>
    <PRE>
    AnsiString Umdrehen()
    {
    UmdrehenDLL * pUmdrehen;
    char tmp2[50];
    AnsiString tmp;
    HINSTANCE h = LoadLibrary("Delphi.dll");
    if(h != 0)
    pUmdrehen= (UmdrehenDLL*)GetProcAddress(h, "Umdrehen/*bezeichnung der exportierten funktion*/");
    if(pUmdrehen != NULL)
    strcpy(tmp2, pUmdrehen());
    FreeLibrary(h);
    tmp = tmp2;
    return tmp;
    }</PRE>

    Natürlich kannst du statt nem AnsiString auch einen C-String zurückgeben. Allerdings ist es so für den gebrauch in Formularen wesentlich angenehmer.<br>
    <br>
    Gruss Michae

    Comment


    • #3
      hallo und sry für das ausgraben dieses alten threads, aber passt hier wunderbar rein und hoffe es ist nicht allzuschlimm.
      hab michaels code in ms-vc++ angewendet und das scheint auch alles zu stimmen darin, aber er bringt mir dann massig fehler (um die 100) bei der datei "sourceannotations.h" (also eine vom visual studio) jemand eine vermutung was da sein kann? oder soll ich mal die ersten fehler posten?
      ...kenne mich leider mit c++ nicht aus, muss mich aber damit auseinandersetzen (nur wegen einer delphi dll) - hoffe ihr könnt mir helfen. danke!

      Comment


      • #4
        Soviel ich weiss basiert diese header datei auf der source annotation language SAL, die so eine art Schemaprüfung übernimmt, wie bei einem design by contract bei schnittstellen.
        #include <CodeAnalysis/SourceAnnotations.h>
        #include <windows.h>
        #include <stdlib.h>
        je nach compiler kann man diesen include auch weglassen.

        Comment


        • #5
          aha ok danke für deine antwort... geholfen hats aber leider nicht
          das ist übrigens der erste von genau 120 Fehlern:
          Code:
          C:\Programme\Microsoft Visual Studio 9.0\VC\include\CodeAnalysis/SourceAnnotations.h(43) : error C2870: 'vc_attributes': Eine Namespace-Definition muss entweder im Dateigültigkeitsbereich oder unmittelbar in einer anderen Namespace-Definition angezeigt werden
          soll das heissen, dass mans ignorieren kann ?(nicht soll!)

          Comment


          • #6
            ja man kanns sicher ignorieren, die annotation ist doch eine utility klasse, die nichts wesentliches zum "business-code" beiträgt; sorry wenn ich das auf die Schnelle sage.

            Comment

            Working...
            X