DLL einbinden
-
extern "C" int iDllVar; extern "C" int DllFuncPlus(int i) extern "C" int DllFuncMinus(int i)
-
Ich habe jetzt "DLL_EXPORT" rausgenommen und 'extern "C"' reingenommen, der Fehler bleibt aber der gleiche.
-
Hier die dll.h:
#ifndef DLL_H #define DLL_H #include <windows.h> #ifdef __cplusplus //in windows.h enthalten #define EXTERN_C extern "C" #else #define EXTERN_C extern #endif EXTERN_C int DllFuncPlus( int i ); EXTERN_C int DllFuncMinus( int i ); /////////////////// #endif DLL_H ///////////////////und die dll.cpp:
#define _DLL #include "dll.h" BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: // DLL wird in den Adressraum des Prozesses eingeblendet. // Bei einem Fehler return FALSE case DLL_THREAD_ATTACH: // Ein Thread wird erstellt. // Hier können notwendige Initialisierungen durchgeführt werden // Serialisieren: // DisableThreadLibraryCalls( hModule ); // hThread = CreateThread( NULL, 0, SomeFunc, NULL, 0, &dwThreadId ); // WaitForSingleObject( hThread, INFINITE ); // CloseHandle ( hThread ); case DLL_THREAD_DETACH: // Ein Thread wird ordnungsgemäss verlassen. // Hier können notwendige Aufräumarbeiten durchgeführt werden case DLL_PROCESS_DETACH: // Die DLL wird aus dem Prozess-Adressraum ausgeblendet // Hier können notwendige Aufräumarbeiten durchgeführt werden // Auctung! // TerminateProzess() führt NICHT immer DLL_PROCESS_DETACH aus! // if ( pHeap != NULL ) HeapFree( GetProcessHeap(), 0, pHeap ); break; } return TRUE; } EXTERN_C int iDllVar=2; //exportierte Variable EXTERN_C int DllFuncPlus(int i) { //exportierte Funktion. char buf[256]; int j = i+iDllVar; wsprintf( buf, "i+iDllVar=%d", j ); MessageBox(0,buf,TEXT("Ergebnis"),MB_OK); return j; } EXTERN_C int DllFuncMinus(int i) { //exportierte Funktion. char buf[256]; int j = i-iDllVar; wsprintf( buf, "i-iDllVar=%d", j ); MessageBox(0,buf,TEXT("Ergebnis"),MB_OK); return j; }
-
Niemand mehr einen Tip? Ich bin hier fast am Verzweifeln

-
Ich vermute eher mal, dass Du vergessen hast Deine DEF-Datei in den Linker-Settings einzutragen! (Project|Properties|Linker|Input|Module Definition File)
-
Nein, die wurde automatisch eingetragen.
Wenn Du Dir die Fehler anschaust, entstehen die ja auch in der def.-File.
-
Ich habe genau Deinen Source und die DEF-Datei in ein neues DLL-Projekt getan und es klappt wunderbar.
-
Wie gehst du genau vor?
Ich habe ja zwei Projekte, einmal das DLL-Projekt, welches die .dll erstellt, und einmal das Applikations-Projekt. für die .exe Datei. Beide gehören zu einem Arbeitsbereich.
Die .def-Datei habe ich in den Source-Files des Applikationsprojektes eingefügt. Muß sie ins DLL-Projekt? Oder gar in beide Projekte?
Gruß
seventh_son
-
Ins DLL-Projekt gehört sie.
-
Danke euch! Das war der Fehler.