如何将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个二进制文件组成:

  1. C#代码
  2. C++/CLI代码
  3. C++代码

C++代码调用C++/CLI代码,然后调用C#代码,以实现从C++运行C#代码的方法。

问题是,C++/CLI被编译为.dll,当我试图将其编译为.lib时,使C++代码与C++/CLI代码链接在一起,它失败了。

因此,最终结果将仅由2个二进制文件组成。

  1. C#代码
  2. 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

如何将C++/CLI程序编译到.lib中,并将其与纯非托管C++程序链接

由于不再有DLL,因此根本不应该使用__declspec(dllimport)

事实上,我强烈反对在类中使用它,因为它非常脆弱。

因此,只需从所有类定义中删除DLLAPI即可。