如何导出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”中)。
答案 0 :(得分:5)
您的DLL项目在构建目录(DLL的导入库)中创建.lib文件。您需要在另一个项目中指定.lib文件,Linker + Input,Additional Dependencies设置。
请注意,“添加引用”无法使用,程序集元数据仅包含托管类的定义。您的类是本机C ++,而不是托管。还要确保在没有/ clr生效的情况下编译.cpp文件。 C ++ / CLI编译器很乐意将本机C ++类转换为IL,但效率不高。您可以使用#pragma managed。
在源代码文件中控制它