gpt4 book ai didi

visual-c++ - 从 C++/CLI 项目导出 native 类型

转载 作者:行者123 更新时间:2023-12-04 02:19:59 25 4
gpt4 key购买 nike

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

.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”中)中使用。

最佳答案

您的 DLL 项目在构建目录中创建一个 .lib 文件,即 DLL 的导入库。您需要在其他项目、链接器 + 输入、附加依赖项设置中指定该 .lib 文件。

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

关于visual-c++ - 从 C++/CLI 项目导出 native 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8786491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com