1

我正在创建一个基本的 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,我在附加选项下添加的。

4

2 回答 2

1

你真的在使用.def 文件吗?

我们可以看到你的命令行编译吗?

于 2009-12-15T04:17:37.303 回答
1

对不起,我修好了。当我将命令行复制到我的问题中时,即使我已经设置了发布配置,我也看到了 /DEBUG。我看到Generate Debugging Info被无意中打开了,所以我禁用它并重新编译。改名已不复存在。

谢谢你的帮助。

于 2009-12-15T04:37:25.977 回答