Leg’ Dir einfach mit VC++ mal ein DLL-Projekt an (Win32 Dynamic-Link Library) und lass’ Dir ein paar Beispiel-Exports generieren (unterster Radio-Button, „A DLL that exports some symbols“). Dann hast Du Beispiele, an die Du Dich halten kannst. Das schaffst Du dann.
Das wichtigste ist eigentlich, dass Du vor Symbolen, die Du exportieren willst, ein Makro schreiben musst. VC++ definiert das in der Beispiel-Datei automatisch fuer Dich, es sieht aber in etwa so aus (Namen sind natuerlich evtl. anders):
#ifdef TESTDLL\_EXPORTS
#define TESTDLL\_API \_\_declspec(dllexport)
#else
#define TESTDLL\_API \_\_declspec(dllimport)
#endif
Jetzt musst Du vor jedes zu expoertierende Symbol TESTDLL_API schreiben:
// This class is exported from the testdll.dll
class TESTDLL\_API CTestdll
{
public: CTestdll(void); // TODO: add your methods here.
};
Was auch noch wichtig ist: Speicher kann nur von der DLL freigegeben werden, in der er reserviert wurde. Wenn Du in Deiner DLL mit new Speicher alloziierst, dann muss das delete auch in einer Funktion dieser DLL stehen. Sonst gibt es Exceptions oder Speicherloecher.
Das Projekt generiert dann einmal eine DLL, die muss dann natuerlich fuer die EXE erreichbar sein, und eine LIB, die Du in Dein EXE-Projekt einbinden musst, genau, wie jede normale LIB.
Das war’s eigentlich. Ist ganz einfach.
–Mathias