gpt4 book ai didi

c++ - 使用 __declspec(dllexport) 从类创建对象

转载 作者:行者123 更新时间:2023-11-28 00:09:57 25 4
gpt4 key购买 nike

//file.h
# define PartExport __declspec(dllexport)
namespace Part{

class PartExport MyClass : public data::anotherClass{
MyClass();
void read();
};
}

我想通过下面的操作来访问这个函数。 Visual Studio 建议执行“Part::read();”和该功能的 f12 工作。

//main.cpp
#include <file.h>

int main(){

Part::read();
return 0;
}

但是在编译时它会提示语法错误,因为它认为 PartExport 是类名。如何访问此函数或创建 MyClass 的对象?

编辑:我意识到类中的所有语法错误都来自 #include 。我不知道那是什么意思

最佳答案

你的类 MyClass 是导出的,因此你应该在你的 main 中写:

Part::MyClass myClass;
myClass.read();

如果你想像在 main 中那样调用你的函数,你应该在你的 file.h 中这样写:

namespace Part{

void PartExport read();

}

但在这种情况下,您将失去类封装。


另一件事:要创建您的 dll,您必须指定 __declspec(dllexport) 以导出库中的函数。

但是当你使用它时,你不应该告诉你的可执行文件你想要导出这个函数,因为它已经导出到你的库中。

我建议您在项目中编译定义此宏的 dll:PART_EXPORT_DLL

然后在你的file.h中这样写:

//file.h
#ifdef PART_EXPORT_DLL
# define PartExport __declspec(dllexport)
#else
# define PartExport __declspec(dllimport)
#endif
namespace Part{

class PartExport MyClass : public data::anotherClass{
MyClass();
void read();
};
}

并且当您要导入它时,请确保不要定义PART_EXPORT_DLL

关于c++ - 使用 __declspec(dllexport) 从类创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33668091/

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