我在dll库中有这个示例c类
class Rectangle { public: int width, height; void set_values (int,int); int area (void); } rect;
并且我在导入dll时使用.def文件导出所有内容我可以访问两个函数(set_values(int,int)和area(void))但不能访问公共变量(width和height)
我如何获得这些变量的访问权限
使用dllexport在dll中导出函数:
extern "C" __declspec(dllexport) bool void set_values (int,int);
您还可以使用dumpbin生成定义文件
dumpbin /EXPORTS tryDLL.dll > tryDLL.def
然后使用lib.exe构建可与您的dll文件一起使用的.lib文件:
lib /def:try.def /out:trydll.lib
正确导出后,您可以将DLL文件复制到应用程序文件夹中,并将目录和lib文件(或使用#pragma)包含在项目中 . 您导出的类和函数定义应在头文件中声明,该文件仍需要包含在项目中 . 这确保了,您的成员函数可以像任何其他普通程序一样被调用 . 您可以访问在dll声明中声明的静态成员变量和常量 .
定义文件应被视为已弃用 . 要导出类,应在“class”关键字后面附加dllimport或dllexport属性 . 在链接库时,应该针对MSVC生成的静态(.lib)库执行此操作,该库可以在与动态库相同的目录中找到
见:https://msdn.microsoft.com/en-us/library/81h27t8c.aspx https://msdn.microsoft.com/en-us/library/3y1sfaz2.aspx
2 回答
使用dllexport在dll中导出函数:
您还可以使用dumpbin生成定义文件
然后使用lib.exe构建可与您的dll文件一起使用的.lib文件:
正确导出后,您可以将DLL文件复制到应用程序文件夹中,并将目录和lib文件(或使用#pragma)包含在项目中 . 您导出的类和函数定义应在头文件中声明,该文件仍需要包含在项目中 . 这确保了,您的成员函数可以像任何其他普通程序一样被调用 . 您可以访问在dll声明中声明的静态成员变量和常量 .
定义文件应被视为已弃用 . 要导出类,应在“class”关键字后面附加dllimport或dllexport属性 . 在链接库时,应该针对MSVC生成的静态(.lib)库执行此操作,该库可以在与动态库相同的目录中找到
见:https://msdn.microsoft.com/en-us/library/81h27t8c.aspx https://msdn.microsoft.com/en-us/library/3y1sfaz2.aspx