从C++/CLI项目导出本机类型

Seb*_*ski 2 c++-cli dllexport visual-c++

如何导出C++/CLI项目中定义的本机类的方法?这就是我所拥有的:

.h文件:

#pragma once

#ifdef COMPILE_PRODUCER_LIB
  #define PRODUCER_LIB_EXPORT __declspec(dllexport)
#else
  #define PRODUCER_LIB_EXPORT __declspec(dllimport)
#endif

public class PRODUCER_LIB_EXPORT MySecondNativeClass {
public:
  MySecondNativeClass(int val);

  int getValue() const;

private:
  int m_value;
};
Run Code Online (Sandbox Code Playgroud)

.cpp文件:

#include "stdafx.h"
#include "MySecondNativeClass.h"

MySecondNativeClass::MySecondNativeClass(int val) {
  this->m_value = val;
}

int MySecondNativeClass::getValue() const {
  return this->m_value;
}
Run Code Online (Sandbox Code Playgroud)

在同一个项目中使用此类工作正常,但在另一个(C++/CLI)项目中使用它会给我"未解析的外部符号"链接器错误.(COMPILE_PRODUCER_LIB是仅在包含类的项目中定义的预处理器定义.)

我已经创建了一个小的解决方案(针对Visual Studio 2010),它显示了问题(在本页末尾下载).在那里,本机类MySecondNativeClass在项目"ManagedProviderLib"中定义,并在"ExternalTestClass.cpp"中使用(在项目"ManagedExternalLib"中).

Han*_*ant 5

您的DLL项目在构建目录(DLL的导入库)中创建.lib文件.您需要在另一个项目中指定.lib文件,Linker + Input,Additional Dependencies设置.

请注意,"添加引用"不起作用,程序集元数据仅包含托管类的定义.您的类是本机C++,而不是托管.还要确保在没有/ clr生效的情况下编译.cpp文件.C++/CLI编译器很乐意将本机C++类转换为IL,但效率不高.您可以使用#pragma managed在源代码文件中控制它.