Announcement

Collapse
No announcement yet.

Externe DLL-Funktionen einbinden

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

  • Externe DLL-Funktionen einbinden

    Seit kurzem lerne ich programmieren unter VC++ 2005. Vorher habe ich mit Visual Basic programmiert. Außerdem habe ich bisher C- und diverse Scriptsprachen benutzt. VC++ 2005 brauche ich für neue Aufgaben.

    Ich habe eine DLL (ohne Quellcode), die ich in einem kleinen C++ Testprogramm einbinden will. Gelesen habe ich bisher, dass es drei Möglichkeiten gibt, wie man DLL-Funktionen in ein VC++ Programm nutzen kann:

    1. statisches Linken (nur Header und LIB ist nötig)
    2. dynamisches Linken (Header, LIB und DLL ist nötig)
    3. dynamisches Laden (Header, DLL sind nötig)

    Mich interessiert die 3. Möglichkeit, da keine LIB vorhanden ist. Ich habe nur die compilierte DLL und die Declare-Anweisungen für Basic.

    -

    Ich habe natürlich bereits diverse Foren durchsucht. Selbst zwei dicke Bücher habe ich durchblättert. Das einzige was ich finden konnte sind Lösungen mit "LoadLibrary", was ich dann auch nehmen werde. Lieber wäre mir aber eine Lösung mit Header-Datei, da das für mich einfacher ist - jedenfalls für meinen derzeitigen Programmierhorizont.

  • #2
    http://www.marquardtnet.info/cecke/t...s.8/8_dll.html
    Christian

    Comment


    • #3
      Die Beschreibung unter o.g. Link setzt eine LIB-Datei voraus.
      Ich habe aber keine LIB! Kann ich die entsprechenden Funktionen
      dann nur mit "LoadLibrary" nutzen?

      Kann doch nicht sein. In vielen Sprachen braucht man doch nur
      eine Declare-Anweisung unter Angabe der entsprechenden DLL.

      Comment


      • #4
        Nein kann man nicht, wenn man die statische "Version" nutzen will.

        "Eine LIB Datei kann nur Not mit dem Dienstprogramm IMPLIB im BIN-Verzeichnis des C++Builders aus einer DLL erzeugt werden."
        Christian

        Comment


        • #5
          @Christian: Wie genau kann ich eine LIB-Datei erzeugen?
          Ich habe kein Dienstprogramm IMPLIB gefunden!

          -

          Ich habe eine Beschreibung gefunden, wie man per DEF-Datei Funktionen einer DLL benutzen kann - ohne LIB. Nur fehlt jetzt wahrscheinlich noch eine Einstellung, bei der die DEF-Datei mit der CPP-Datei verknüpft wird (sowas oder sowas ähnliches). Dazu folgendes Beispiel und weiter unten die Fehlermeldung des Compilers bzw. des Linkers.

          -

          Test.def
          LIBRARY MyDLL.dll
          EXPORTS
          _c_add
          _c_sub

          -

          Test.cpp
          #include <iostream>
          #include <windows.h>
          using namespace std;

          extern "C" __declspec(dllimport)long _c_add(long bParam);
          extern "C" __declspec(dllimport)long _c_sub(long bParam);

          int main ()
          {
          long x = _c_add(10);
          long y = _c_sub(10);

          cout << "_c_add: " << x << endl;
          cout << "_c_sub: " << y << endl;

          return 0;
          }

          -

          Folgende Fehlermeldung erscheint, wenn ich das Projekt compiliere:

          1>Verknüpfen...
          1>T4.def : error LNK2001: Nicht aufgelöstes externes Symbol "_c_add".
          1>T4.def : error LNK2001: Nicht aufgelöstes externes Symbol "_c_sub".
          1>mydll.dll : fatal error LNK1120: 2 nicht aufgelöste externe Verweise.

          Comment


          • #6
            Steht im Handbuch zu IMPLIB drin.....auswendig weiss ich das auch nicht
            Christian

            Comment

            Working...
            X