Announcement

Collapse
No announcement yet.

DLL in cBuilder aufrufen

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

  • DLL in cBuilder aufrufen

    Hallo
    Hab ein problem, möchte gerne eine dll datei in mein programm aufnehmen. Wobei ich eine int variable übergeben möchte die den wert 1-10 hat. die dll datei ist aus VC erstellt und führt mit der variable eine switch funktion aus.
    wie kann ich das machen. viel kleines Bsp.: oder wo ich eines finden kann.

    danke für eure hilfe im vorraus.

  • #2
    Zwei Wege führen zum Ziel (Anleitung sinngemäß nach Darstellung im Buch "C++ mit dem Borland C++ Builder" Richard Kaiser, Springer, ISBN 3-540-62994-7; S. 659, 660):

    <ol start=1><li><b>Implizit</b> (wenn *.LIB der DLL vorhanden, dann kann dieses in das Projekt eingebunden werden): <i>Projekt|Dem Projekt</i> hinzufügen, LIB-Datei der MyDLL.dll

    Die Deklaration einer Funktion aus der DLL erfolgt dann über

    <b>__declspec(dllimport) int swap(int, int);</b>

    Der Einsatz:

    <b>int newInt = swap(5, 12);</b>

    Die DLL muss natürlich in einem für das Programm zugänglichem Verzeichnis stehen (Arbeits-|akt.-|WindowsSystem-|Windows-|UmgebungsPath-Verzeichnis) zu finden sein.

    <li><b>Explizit</b> mit der Windows-API-Funktion

    <b>HINSTANCE hndl = LoadLibrary("MyDLL.dll");</b>

    Die Adresse einer Funktion in der DLL liefert:

    <b>typedef int __stdcall Tswap(int i1, int i2);</b> <i>//Datentyp für den Funktionszeiger</b>

    <b>Tswap *swap = (Tswap *)GetProcAddress(hndl, "<font color=red>EXPORTSNAME</font>");</b>

    Für <font color=red>EXPORTSNAME</font> ist genau der Name zu setzen, der intern in der DLL für diese Funktion gesetzt ist (über Hilfsprogramm IMPDEF) und der vom im Quelltext der DLL verwendeten Namen abweicht.</ol>

    Getestet hae ich diese "Fahrplan" nich nicht, so dass ich hoffe, dass die Fachkompetenz hier im Forum ggf. auf die eventuell vorhanden Lücken verweist.

    Gruß

    Comment


    • #3
      http://home.snafu.de/christian.marquardt/tutorials.8/8_dll.htm
      Christian

      Comment


      • #4
        Hallo,<p>
        ich hab' das mal über eine Projektname.def Datei hinbekommen (zum Projekt zufügen), der Bezeichner vor dem Punkt ist der Name der DLL. Hier ein Beispiel:<p>
        <pre>
        imports
        SQLAllocEnv = odbc32.SQLAllocEnv
        SQLSetEnvAttr = odbc32.SQLSetEnvAttr
        SQLDriverConnect = odbc32.SQLDriverConnect
        SQLAllocHandle = odbc32.SQLAllocHandle
        SQLExecDirect = odbc32.SQLExecDirect
        SQLBindCol = odbc32.SQLBindCol
        SQLFetch = odbc32.SQLFetch
        SQLFreeStmt = odbc32.SQLFreeStmt
        SQLDisconnect = odbc32.SQLDisconnect
        SQLFreeHandle = odbc32.SQLFreeHandle
        SQLError = odbc32.SQLError
        SQLGetDiagRec = odbc32.SQLGetDiagRec
        IcmpCreateFile = icmp.IcmpCreateFile
        IcmpCloseHandle = icmp.IcmpCloseHandle
        IcmpSendEcho = icmp.IcmpSendEcho
        </pre>
        <p>
        Gruß Armi

        Comment

        Working...
        X