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.


Anmelden zum Antworten