Announcement

Collapse
No announcement yet.

Nutzung einer DLL Datei ohne Lib Datei

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

  • Nutzung einer DLL Datei ohne Lib Datei

    Hallo zusammen,

    hmm mal ne etwas blöde frage. Kann man eine DLL im Project benutzen wenn man keine LIB Datei hat? Wenn ja wie? Die Funktionen der DLL sind mir bekannt, auch die Parameter. Es gibt halt nur keine LIB Datei dazu.
    Auch das Tool implib was sonnst immer brav läuft streikt bei dieser DLL.

    Vom Support ders Herstellers der DLL hab ich nur zu hören bekommen das sie keine Importdateien haben und wenn ich diese bräuchte müsste ich mit diese selbst erstellen .

    danke,

    Gruß Lukas

  • #2
    Versuchs doch mal mit "Projekt/Typbibliothek importieren"

    Oder

    Code:
    HINSTANCE myDll = LoadLibrary("myDll.dll");
    if (myDll) 
    void(__stdcall * myFkt)(int) =(void(__stdcall *)(int))GetProcAddress(myDll, "myFkt");

    Comment


    • #3
      Nur eine kleine Bemerkung am Rande:

      Aufpassen wenn die Funktionen nicht als C, sonder als C++ Funktionen exportiert werden. Dann sind die Namen der Einsprungpunkte etwas anders.
      Da hatte ich auch schon sehr viel Spaß damit

      Bei etwaigen Problemen in der Richtung kann ich folgendes Tool empfehlen:

      http://www.dependencywalker.com/

      Dort kann man sich auch die vollen C++ Funktionsnamen anzeigen lassen. Ich glaube die Funktion hieß "Undecorate C++ Function names" oder so

      Comment


      • #4
        Originally posted by Brian79rh View Post
        ... Kann man eine DLL im Project benutzen wenn man keine LIB Datei hat?
        Ja.

        Wenn ja wie? Die Funktionen der DLL sind mir bekannt, auch die Parameter.
        Mit LoadLibrary() die .dll laden und danach mit GetProcAddress() die functionpointers bestimmen.

        Comment


        • #5
          Hallo,

          danke für eure Antworte. Hmm vielleicht stelle ich mich doof an, aber es kommt immer wieder nur eine Speicherschutzverletztung.
          Die Function "getDeviceName" soll den Namen des mit Int angegebene Treiber zurückliefern, als String.

          Was mache ich falsch ?

          Danke


          //---------------------------------------------------------------------------

          #include <vcl.h>
          #pragma hdrstop

          #include "Unit1.h"

          #include <Tapi.h>

          //---------------------------------------------------------------------------
          #pragma package(smart_init)
          #pragma resource "*.dfm"
          TForm1 *Form1;

          //---------------------------------------------------------------------------
          __fastcall TForm1::TForm1(TComponent* Owner)
          : TForm(Owner)
          {



          HINSTANCE myDll = LoadLibrary("topTapi2.dll");

          if (myDll){
          String(__stdcall * myFkt)(int) =(String(__stdcall *)(int))GetProcAddress(myDll, "getDeviceName");



          ShowMessage((*myFkt)(2));



          }
          //---------------------------------------------------------------------------

          Comment


          • #6
            Originally posted by Brian79rh View Post

            HINSTANCE myDll = LoadLibrary("topTapi2.dll");

            if (myDll){
            String(__stdcall * myFkt)(int) =(String(__stdcall *)(int))GetProcAddress(myDll, "getDeviceName");



            ShowMessage((*myFkt)(2));


            }
            Du kontrolierst gar nicht ob GetProcAddress eine pointer (nicht null) zurueck gibt. Die functionspointer brauchst du nicht zu dereferentiieren.

            Code:
            if ( myFkt )
                 ShowMessage ( myFkt(2) );
            Weiter ist __stdcall eine Borland erfindung und .dll's werden nicht damit versorgd sein da sie Sprache unabhängig sind. Lass __stdcall besser weg.

            Comment


            • #7
              ok,

              könntest du mir dazu ein beispiel sagen? Ich muß zu geben das ich mit Funktionszeigern noch nicht so viel gemacht habe...

              Comment


              • #8
                Originally posted by Brian79rh View Post
                könntest du mir dazu ein beispiel sagen?
                Was meinst du mit "dazu"?

                Deine code ist schon korrigiert. Und etwas weglassen ... ist gleich entfernen.

                Comment


                • #9
                  Ich würde auch NIE String als Rückgabeparameter benutzen. Strings sind über verschiedene Programmmiersprachen nicht normiert. Würde auf ein Character Array setzen.

                  Comment

                  Working...
                  X