kleines prob mit dll
-
hi leute,
ich hab nach ner längeren Zeit nochmal angefangen zu programmieren und festgestellt, dass ich noch nichtmal mehr eine DLL geladen bekomm...:(hoffe mir kann einer helfen hiermal mein Werk:
DLL
#include "stdafx.h" #include "windows.h" #include "dll.h" #ifdef _MANAGED #pragma managed(push, off) #endif BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } EXPORT bool MSGBOX() { MessageBox(NULL, L"Nachricht aus der DLL !", L" DLL ", NULL); return true;Dll.h
#ifdef __cplusplus #define EXPORT extern "C" __declspec (dllexport) #else #define EXPORT __declspec (dllexport) #endif EXPORT bool MSGBOX();programm:
#pragma comment("lib","dll.lib") #include "stdafx.h" #include "windows.h" #include "dll.h" int _tmain(int argc, _TCHAR* argv[]) { MSGBOX(); return 0; }die Fehlermeldung:
prog.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_MSGBOX" in Funktion "_wmain".
C:\Dokumente und Einstellungen\as\Eigene Dateien\Visual Studio 2005\Projects\DLL-Test\prog\Debug\prog.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.ich hoffe mal jmd kann mir helfen

mfG nohaPS:
ich hoffe es macht keinen Unterschied ob ich eine Konsolenanwendungs oder eine Windowsanwendungs - Projekt erstelle.
-
Beim Programm, welches die DLL laden soll, musst du bei der deklaration der Funktion __declspec(dllimport) verwenden, nicht export.
-
das scheint nix zu ändern
wieder ähnliche Fehlermeldung:
prog.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) bool __cdecl MSGBOX(void)" (__imp_?MSGBOX@@YA_NXZ)" in Funktion "_wmain".
C:\Dokumente und Einstellungen\as\Eigene Dateien\Visual Studio 2005\Projects\DLL-Test\prog\Debug\prog.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
-
In dem Modul in dem Du die DLL benutzen willsst musst Du
__declspec( dllimport )verwenden! Und nicht nochmal die Funktion als extportiert angeben.
-
in dem prog dass die DLL benutzen soll, habe ich die Funktion folgendermaßen bekannt gemacht:
__declspec (dllimport) bool MSGBOX();wenn das so richtig ist, liegt der fehler da nicht
-
Hast du auch die zur DLL passende Lib eingebunden?
-
noha_391 schrieb:
in dem prog dass die DLL benutzen soll, habe ich die Funktion folgendermaßen bekannt gemacht:
__declspec (dllimport) bool MSGBOX();Da fehlt dann aber noch ein "extern "C"".
-
ist es auch nicht, bekomm trotzdem die Fehlermeldung:
prog.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__MSGBOX" in Funktion "_wmain".
C:\Dokumente und Einstellungen\as\Eigene Dateien\Visual Studio 2005\Projects\DLL-Test\prog\Debug\prog.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
-
Dann Lege mal dieses Mini-Projekt irgendwo ab, damit man sich das mal ansehen kann.
Schau mal mit DEPENDS.EXE in die DLL hinein damit Du siehst welche Signatur die Funktion hat.
-
werde es morgen mal zum angucken bereitstellen....
was ist DEPENDS ?
-
Ein Tool mit dem man die Entry-Points von DLLs ansehen, kann, bzw. welche externen DLLs von einem Moudl verwendet werden.
Gehört als Tool zum Visual Studio! Oder auch hier: http://dependencywalker.com/
-
hier das projekt:
http://rapidshare.com/files/131114709/prog.rar.html
http://rapidshare.com/files/131114710/Dll.rar.htmldepends sagt erkennt schonaml die funktion die sich dort befindet
aber ich bekomm 2 Warnungen vom Programm ( mein englisch ist nicht so gut aber ich glaube mal, dass das nix mit meinem Problem zu tun hat)Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.
-
Argh...
Ist Dir eigentlich nicht klar, dass Du auch die DLL.LIB irgendwo in dem PROG-Projekt hinterlegen musst. Wie soll den PROG.SLN wissen wo die DLL.LIB liegt.
Du hast nur angegeben suche sie dort....
Am einfachsten geht, dass indem Du in der Proj-Solution die DLL:vcproj einfügst und eine Abhängigkeit zwischen Prog und Dll herstellst.
-
ich habe die lib in das Verzeichnis Dll und debug gepackt, so dass beim kompilieren darauf zugegriffen werden kann...
( sonst bekäm ich doch die Meldung dass die Datei nicht gefunden werden konnte... )
-
Ich habe einfach nur das DLL Projekt eingefügt und das wars...
-
was hast du denn genau gemacht ? bzw wie hast du es gemacht ?
-
Habe ich doch geschrieben: In die Solution der EXE habe ich das DLL Projekt eingefügtund die Projekt Abhängigkeiten gesetzt.
-
Wenn die DLL nicht im selben Verzeichnis wie das Programm liegt, musst du dem Linker das Verzeichnis hinzufügen, bei Code::Blocks heißt der Tab Search directories.
-
aber die dll liegt doch im gleichen Verzeichnis wie das Programm, und auch die lib, da ich diese dorthin kopiert habe...