我正在创建一个基本的 COM 组件,以便练习创建它们。
我正在使用 PRIVATE 关键字从 .def 文件中导出 DllRegisterServer、DllUnregisterServer、DllGetClassObject 和 DllCanUnloadNow(我认为 Microsoft 需要它)。
Anway,我用 extern "C" 指定了所有 4 个函数,但我仍然在弄乱。这是我的.def:
EXPORTS
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
这是来自 dumpbin /EXPORTS 的修改
_DllCanUnloadNow@0
_DllGetClassObject@12
_DllRegisterServer@0
_DllUnregisterServer@0
我知道 extern "C" 有帮助,因为没有它我会得到非常糟糕的修饰,但我认为带有 extern "C" 的 .def 应该摆脱名称修饰?
我的编译器是 VC++ Express 2008。链接器命令行:
/OUT:"G:\Programming\COM\BasicMathCOM\BasicMath\Release\BasicMath.dll" /INCREMENTAL:NO /NOLOGO /DLL /MANIFEST /MANIFESTFILE:"Release\BasicMath.dll.intermediate.manifest" /MANIFESTUAC:"级别='asInvoker' uiAccess='false'" /DEBUG /PDB:"g:\Programming\COM\BasicMathCOM\BasicMath\Release\BasicMath.pdb" /SUBSYSTEM:WINDOWS /OPT:REF /OPT:ICF /LTCG /DYNAMICBASE / NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
+/DEF:BasicMath.def,我在附加选项下添加的。