使用def文件和extern“C”命名mangling

时间:2009-12-15 04:11:47

标签: com visual-c++-2008

我正在创建一个基本的COM组件,因此我可以练习创建它们。

我正在使用PRIVATE关键字从.def文件导出DllRegisterServer,DllUnregisterServer,DllGetClassObject和DllCanUnloadNow(我认为Microsoft需要它)。

Anway,我用外部“C”指定了所有4个函数,但我仍然在修改。 这是我的.def:

EXPORTS
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE

这是来自dumpbin / EXPORTS的翻版

_DllCanUnloadNow@0
_DllGetClassObject@12
_DllRegisterServer@0
_DllUnregisterServer@0

我知道外部的“C”有帮助,因为没有它我会变得非常糟糕,但我认为带有外部“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 :“level ='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,我在其他选项下添加了。

2 个答案:

答案 0 :(得分:1)

你实际上是使用 .def文件吗?

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

答案 1 :(得分:1)

抱歉,我修好了。当我将命令行复制到我的问题中时,我看到了/ DEBUG,即使我已经设置了Release Configuration。我看到Generate Debugging Info无意中打开了,所以我禁用它并重新编译。这个名字已经消失了。

感谢您的帮助。