使用 __declspec(dllexport) 从类创建对象
Creating object from class with __declspec(dllexport)
//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
被导出,因此你应该在你的主:
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
您要访问的不是函数,而是成员函数。因此,您必须指定它是哪个类的成员。
由于您尚未将其声明为静态,这将使它类似于函数,因此您甚至必须实例化其中一个MyClass才能访问它。(非静态函数有一个"this"指针,没有你的类的实例就没有"this"(
命名空间"Part"只是类的另一个包装器。
要访问命名空间中的某些内容,请执行如下操作:
Part::somethinginmynamespace
要调用命名空间中的函数,请执行以下操作
Part::somefunction();
访问您使用的静态成员函数
Part::SomeClass::SomeStaticFunction();
要访问非静态成员函数,请执行以下操作:
Part::Someclass myinstance;
myInstance.myFunction();
如果您在定义上遇到错误,并且编译器认为它是一个类名,则定义是未定义的。也许你把它放在评论中,或者大写/小写是错误的。
相关文章:
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何创建对象函数指针C++映射?
- C++创建对象数组
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- 如何获取在 main() 函数中构造的类的创建对象?
- 基于文件中的条目创建对象
- 错误:创建对象后无法分配区域
- C++ 通过输入创建对象
- 堆还是堆栈用于创建对象?
- 使用 C++ 创建对象数组
- 使用unique_ptr创建对象
- C++递归地在类构造函数中创建对象
- 通过向构造函数其他对象引用页面来创建对象
- ReactiveX (rx) - 在对象上应用可观察对象,而不是在可观察对象中创建对象
- 如何在OSX上正确创建C++对象文件(.o)
- 编译器是否会创建vtable,而不考虑在c++中创建对象
- 创建对象并防止被破坏
- 在C++中,友元类可以从友元类创建对象吗
- 只在堆中创建C++对象
- 使用 __declspec(dllexport) 从类创建对象