我正在开发构建XLL Excel加载项的C ++代码,为了能够使用Visual Studio 2013进行调试,我使用/MTd
选项进行编译,即“多线程,调试模式”但遇到了这样的编译错误:
2>LIBCMT.lib(invarg.obj) : error LNK2005: "void __cdecl _invalid_parameter(unsigned short const *,unsigned short const *,unsigned short const *,unsigned int,unsigned int)" (?_invalid_parameter@@YAXPBG00II@Z) already defined in LIBCMTD.lib(invarg.obj)
根据Visual Studio - error LNK2005 in debug mode,这是因为链接LIBCMT
(Microsoft运行时库,发行版)和LIBCMTD
(调试版);解决方法是添加链接器选项/FORCE:MULTIPLE
以强制构建,/NODEFAULTLIB:LIBCMT
忽略LIBCMT
。
然而,在此之后我的XLL可以编译但无法调试,即在项目属性,配置属性 - >中。调试,我将Command设置为"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.exe"
;在我启动Debugger后,从XLL键入一个公式调用函数,Visual Studio断点应该在这里触发但是失败。
我的XLL使用第三方组件,即数据库库。
是否所有代码都以/MTd
模式编译,包括数据库库?或者我错过了什么,实际上有一种方法可以在Visual Studio中触发断点,即使第三方库没有在调试模式下编译?