Ciao Berico,
nel seguente esempio creiamo una dll che contiene una classe chiamata CExportClassFromDll. La classe contiene una funzione membro "public" che ritorna il valore della variabile membro x (inizializzata nel costruttore):
Dichiarazione della classe nel file header ExportClassFromDll.h:
Definizione delle funzioni della classe nel file ExportClassFromDll.cpp:codice:#ifdef EXPORTCLASSFROMDLL_EXPORTS #define EXPORTCLASSFROMDLL_API __declspec(dllexport) #else #define EXPORTCLASSFROMDLL_API __declspec(dllimport) #endif #ifdef __cplusplus extern "C" { #endif // This class is exported from the ExportClassFromDll.dll class EXPORTCLASSFROMDLL_API CExportClassFromDll { public: CExportClassFromDll(void); // TODO: add your methods here. int GetValue(); private: int x; }; #ifdef __cplusplus } #endif
Nel programma client, basta includere il file .lib (nell'esempio ExportClassFromDll.lib ) che il compilatore crea, fra le dipendenze del linker e includere il file ExportClassFromDll.h:codice:#define EXPORTCLASSFROMDLL_EXPORTS #include "ExportClassFromDll.h" CExportClassFromDll::CExportClassFromDll() { x = 21; return; } int CExportClassFromDll::GetValue() { return x; }
Come puoi notare, nel file che definisce la classe nella dll, definiamo la macro EXPORTCLASSFROMDLL_EXPORTS in modo che, compilando la dll, la macro EXPORTCLASSFROMDLL_API si espanda in __declspec(dllexport).codice:#include <iostream> using namespace std; #include "ExportClassFromDll.h" int _tmain(int argc, _TCHAR* argv[]) { CExportClassFromDll myCLassFromDll; cout << myCLassFromDll.GetValue() << endl; return 0; }
Nel client invece, includendo semplicemente il file ExportClassFromDll.h senza definire la macro EXPORTCLASSFROMDLL_EXPORTS, la macro EXPORTCLASSFROMDLL_API[/b] si espande in __declspec(dllimport).
la direttiva extern "C" consente di esportare/importare i nomi senza che vengano decorati dal compilatore CPP. Questo rende la nostra DLL utilizzabile da diversi compilatori (ogni compilatore CPP utilizza infatti una tecnica diversa per decorare i nomi esportati da una dll).
È la tecnica utilizzata dalla Microsoft per esportare/importare le funzioni della API Win32; basta dare un'occhiata agli header file del SDK.

 
			
			 
					
					
					
						 Rispondi quotando
  Rispondi quotando