Alle die schon einmal versucht haben eine COM-Dll unter Visual Studio 2008 zu bauen, kommen nach ca. einem halben Tag Zeitverlust und "Investigations for the solution to the issue" zu dem Schluss, dass nicht an Ihrem Programm etwas falsch ist, sondern an den MFC-Klassen.
Fehlermeldung des VS2008 C/C++-Compilers:
mfcs90u.lib(oleexp.obj) : error LNK2005: _DllGetClassObject@12 already defined in dllentry.obj mfcs90u.lib(oleexp.obj) : error LNK2005: _DllCanUnloadNow@0 already defined in dllentry.obj
Die .def Datei in der die COM-Exporte stehen ist entsprechend anzupassen, damit keine Konflikte mehr auftreten. Es wird ein einfaches Mapping durchgeführt. Die entsprechenden Funktionsdefinitionen bzw. deren Deklarationen in .h und .cpp Dateien sind entsprechend anzupassen.
Bisheriger Dateiinhalt:
EXPORTS
; Explicit exports can go here
DllCanUnloadNow PRIVATE
DllGetClassObject PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
Neuer Dateiinhalt:
EXPORTS
; Explicit exports can go here
DllCanUnloadNow = MyDllCanUnloadNow PRIVATE
DllGetClassObject = MyDllGetClassObject PRIVATE
DllRegisterServer = MyDllRegisterServer PRIVATE
DllUnregisterServer = MyDllUnregisterServer PRIVATE
Das Ganze ist allerdings nicht auf meinen Mist gewachsen, sondern entstammt einem Thread aus einem Microsoft-Forum. Ich bin nur durch lange Suche darauf gestoßen und habe es hier noch einmal weitergezwitschert, damit es nicht in Vergessenheit gerät.
Viel Spaß auch weiterhin mit der Entwicklung von COM-Servern. ;-)