Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

dll in vc++ einbinden





Frage

hallo leute! ich möchte gern eine dll (in der eine reihe wichtiger funktionen beeinhaltet sind) in mein eigenes c++ programm einbinden, und dadurch auf die funktionen zugreifen können. das einzige was ich weiss ist, wie die dll heisst und welche funktionen drin sind. mehr nicht... kann mir da einer weiterhelfen? danke & mfg

Antwort 1 von chriss

Hi.
Also:
1. Die Header - Datei in deinen Quellcode includen
2. Die Lib - Datei der DLL in dein Projekt einbinden. Bei DevStudio geht das unter "Projekt"->"Einstellungen"->"Linker"->"Objekt/Bibliothek Module" (Obacht: Sowohl bei "Release" als auch bei "Debug" eingeben),
beim Borland Builder geht das in der "Projektverwaltung"->Rechter Mausklick->"Hinzufügen"
3. Die Suchpfade der Bibliotheken (.lib) und Headerdateien (.h) um die jeweiligen Pfade der Bibliotheksdateien erweitern
4. Zur Laufzeit sollte (für den Anfang) die dll im Verzeichnis der erstellten Anwendung sein, sonst wird sie wahrscheinlich nicht gefunden.
5. Beten dass in der Headerdatei die Funktionen richtig deklariert sind. Bei Borland Builder muss u.U. eine neue Lib aus der dll erzeugt werden (steht aber in der Doku, Stichworte IMPDEF und IMPLIB).
6. Beim ersten Mal klappts nie. Einfach bisschen rumspielen, ansonsten nochmal fragen.

Ich hoffe ich konnte dir helfen.

Gruß

Antwort 2 von omicron

welche header-datei meinst du? und welche lib? sowas hab ich nicht... wie gesagt, nur die dll! und ich benutze visual studio 6.0...


Antwort 3 von asok

Schau dir mal das Beispiel aus der MSDN hier an. Das ist eigentlich selbsterklärend.

// File:  RUNTIME.C
// A simple program that uses LoadLibrary and 
// GetProcAddress to access myPuts from MYPUTS.DLL. 
 
#include <stdio.h> 
#include <windows.h> 
 
typedef VOID (*MYPROC)(LPTSTR); 
 
VOID main(VOID) 
{ 
    HINSTANCE hinstLib; 
    MYPROC ProcAdd; 
    BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; 
 
    // Get a handle to the DLL module.
 
    hinstLib = LoadLibrary("myputs"); 
 
    // If the handle is valid, try to get the function address.
 
    if (hinstLib != NULL) 
    { 
        ProcAdd = (MYPROC) GetProcAddress(hinstLib, "myPuts"); 
 
        // If the function address is valid, call the function.
 
        if (fRunTimeLinkSuccess = (ProcAdd != NULL)) 
            (ProcAdd) ("message via DLL function\n"); 
 
        // Free the DLL module.
 
        fFreeResult = FreeLibrary(hinstLib); 
    } 
 
    // If unable to call the DLL function, use an alternative.
 
    if (! fRunTimeLinkSuccess) 
        printf("message via alternative method\n"); 
}


Wie du siehst, sind LoadLibrary und GetProcAdress die Funktionen, die du brauchst. Header-Dateien und Libs kannst du dir sparen, Chriss hat offenbar den Unterschied zwischen statischer und dynamischer Library nicht so ganz raus (nix für ungut).

Antwort 4 von comment

chriss macht das genau richtig, wenn man die lib und die jeweilige header hat. auch bei dynamischen libs.

aber im gewünschten fall ist doch asok auf dem richtigen pfad

gruz

Antwort 5 von chriss

Hi nochmal.
Der Vorteil mit der Headerdatei und der Lib ist halt der dass man im Klassenbrowser die Objekte sieht. hat man beides nicht macht natürlich keinen Sinn. Kommt halt drauf an woher die dll kommt...

Gruß

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: