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

时间:2012-01-09 09:47:55

标签: visual-c++ c++-cli dllexport

如何导出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;
};

.cpp文件:

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

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

int MySecondNativeClass::getValue() const {
  return this->m_value;
}

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

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

1 个答案:

答案 0 :(得分:5)

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

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

在源代码文件中控制它