首页 文章

如何从dll导入公共成员

提问于
浏览
0

我在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)

我如何获得这些变量的访问权限

2 回答

  • 1

    使用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声明中声明的静态成员变量和常量 .

  • 0

    定义文件应被视为已弃用 . 要导出类,应在“class”关键字后面附加dllimport或dllexport属性 . 在链接库时,应该针对MSVC生成的静态(.lib)库执行此操作,该库可以在与动态库相同的目录中找到

    见:https://msdn.microsoft.com/en-us/library/81h27t8c.aspx https://msdn.microsoft.com/en-us/library/3y1sfaz2.aspx

相关问题