如何将C++/CLI程序编译到.lib中,并将其与纯非托管C++程序链接
本文关键字:程序 C++ 链接 lib CLI 编译 | 更新日期: 2023-09-27 18:24:10
我正在关注这个http://www.codeproject.com/Articles/10020/Using-managed-code-in-an-unmanaged-application
该示例由3个二进制文件组成:
- C#代码
- C++/CLI代码
- C++代码
C++代码调用C++/CLI代码,然后调用C#代码,以实现从C++运行C#代码的方法。
问题是,C++/CLI被编译为.dll,当我试图将其编译为.lib时,使C++代码与C++/CLI代码链接在一起,它失败了。
因此,最终结果将仅由2个二进制文件组成。
- C#代码
- C++--链接--C++/CLI代码
错误
Error 1 error LNK2019: unresolved external symbol "__declspec(dllimport) public: static void __cdecl IMessageBoxWrapper::Destroy(class IMessageBoxWrapper *)" (__imp_?Destroy@IMessageBoxWrapper@@SAXPAV1@@Z) referenced in function _main C:'Users'Zero'Desktop'UmanagedApp'UmanagedApp'main.obj UmanagedApp
Error 2 error LNK2019: unresolved external symbol "__declspec(dllimport) public: static class IMessageBoxWrapper * __cdecl IMessageBoxWrapper::CreateInstance(void)" (__imp_?CreateInstance@IMessageBoxWrapper@@SAPAV1@XZ) referenced in function _main C:'Users'Zero'Desktop'UmanagedApp'UmanagedApp'main.obj UmanagedApp
由于不再有DLL,因此根本不应该使用__declspec(dllimport)
。
事实上,我强烈反对在类中使用它,因为它非常脆弱。
因此,只需从所有类定义中删除DLLAPI
即可。