Com 名称与def文件和extern“冲突”;";

Com 名称与def文件和extern“冲突”;";,com,visual-c++-2008,Com,Visual C++ 2008,我正在创建一个基本的COM组件,以便练习创建它们 我正在从带有PRIVATE关键字的.def文件导出DllRegisterServer、DllUnregisterServer、DllGetClassObject和dllcanLoadNow(我认为Microsoft需要它) Anway,我用extern“C”指定了所有4个函数,但我仍然感到困惑。 这是我的.def: EXPORTS DllRegisterServer PRIVATE DllUnregisterServer PRIVATE DllG

我正在创建一个基本的COM组件,以便练习创建它们

我正在从带有PRIVATE关键字的.def文件导出DllRegisterServer、DllUnregisterServer、DllGetClassObject和dllcanLoadNow(我认为Microsoft需要它)

Anway,我用extern“C”指定了所有4个函数,但我仍然感到困惑。 这是我的.def:

EXPORTS
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
这是从垃圾箱/出口处弄来的垃圾

_DllCanUnloadNow@0
_DllGetClassObject@12
_DllRegisterServer@0
_DllUnregisterServer@0
我知道extern“C”很有帮助,因为没有它我会弄得很糟糕,但我认为带extern“C”的.def应该可以消除名称混乱

我的编译器是VC++Express 2008。 链接器命令行:

/输出:“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\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 uuid.lib odbc32.lib odbccp32.lib


+/DEF:BasicMath.DEF,这是我在附加选项下添加的。

您实际上是在使用.DEF文件吗


我们可以查看要编译的命令行吗?

对不起,我已经修复了它。当我将命令行复制到问题中时,我看到了一个/DEBUG,尽管我已经设置了发布配置。我看到生成调试信息被无意中打开,所以我禁用了它并重新编译。mangling这个名字不见了


感谢您的帮助。

Visual Studio是否可能未使用def文件?检查链接命令行中的/DEF选项。我发现dumpbin没有给我任何导出,所以我添加了/DEF,它给了我上面损坏的导出。实际上发布构建日志,而不是从项目选项发布。Ctrl单击它。我在VC 2005和2008上测试了一个简单的示例,它工作正常,所以这一定是你的目的。不知怎么的,生成调试信息被打开了。我不擅长阅读编译器命令行,所以直到在发布配置中看到a/DEBUG并被难倒,我才发现它,所以我四处搜索,直到找到该选项并将其禁用。我将尝试将其安装。在我没有得到任何导出之前,我进入了我的链接器选项并添加了a/DEF选项。确保您正在构建您认为正确的配置。