我正在创建一个基本的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,我在其他选项下添加了。
答案 0 :(得分:1)
你实际上是使用 .def文件吗?
我们可以看到你的命令行进行编译吗?
答案 1 :(得分:1)
抱歉,我修好了。当我将命令行复制到我的问题中时,我看到了/ DEBUG,即使我已经设置了Release Configuration。我看到Generate Debugging Info无意中打开了,所以我禁用它并重新编译。这个名字已经消失了。
感谢您的帮助。