如何将C ++ / CLI程序编译成.lib并将其与纯粹的非托管C ++程序链接?

时间:2012-02-11 05:38:15

标签: c# c++ interop c++-cli mixed-mode

我正在关注此http://www.codeproject.com/Articles/10020/Using-managed-code-in-an-unmanaged-application

该示例包含3个二进制文件:

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

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

    这样最终结果只包含2个二进制文件。

    1. C#代码
    2. C ++ - LINK-- C ++ / CLI代码
    3. 错误

      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
      

1 个答案:

答案 0 :(得分:1)

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

实际上,我强烈反对在课堂上使用它,但它非常脆弱。

所以只需从所有类定义中删除DLLAPI