如何从dll中公开类?
导入dll的应用程序应该能够创建类的对象,并且他应该能够调用类的成员函数。
是否类似于使用__declspec(dllexport)
公开C类型函数?
当我构建dll(它只包含头文件中的类定义及其cpp文件中的成员函数定义)时,也没有创建相应的lib文件。
答案 0 :(得分:2)
Here。请记住,您不能使用LoadLibrary()/ GetProcAddress()。
来使用此导出的类答案 1 :(得分:2)
导出类中至少一个公共方法的定义必须具有_declspec(dllexport)前缀才能创建lib文件。如果没有这些方法具有此前缀,则只有声明(即头文件)可用,但该类将无法实例化(导出构造函数是必需的)。如果至少有一个方法有_declspec(dllexport)前缀,那么编译器会理解dll用户必须能够链接到这个dll。一旦exe链接到它们,操作系统就会加载这些dll。
您可以考虑针对您的问题采用“工厂”方法。例如,Symbian OS使用多态dll实现这种方法。要做到这一点,你必须:
声明(即头文件)并定义(即cpp文件)dll中的类。不需要任何其他东西。
在你的dll中创建一个“factory”函数,它会为你的类创建一个实例并返回指向它的指针。此函数必须具有_declspec(dllexport)前缀。
与您的用户共享您的头文件和lib文件。
用户包括头文件和lib文件的链接。
用户调用工厂函数来实例化类(即创建对象),然后将其用作普通类。
上面的5个步骤就像Symbian OS中的魅力一样。您必须在自己的平台上自行尝试并发布结果。坦率地说,我没有在Windows上试过它。
答案 2 :(得分:1)
是否类似于使用
_declspec(dllexport)
公开C类型函数?
是。并且__declspec可以应用于类。
没有创建相应的lib文件
IIRC这是默认设置,但您可以覆盖默认链接器选项。
答案 3 :(得分:0)
查看Def Files,其中第一个链接是Using __declspec(dllexport)
答案 4 :(得分:0)
Google搜索“class dllexport”导致this page from MSDN作为第一个结果。
该页面似乎表明只需要__declspec(dllexport)
即可。