私有DLL函数是公共可访问的

时间:2010-11-01 20:19:28

标签: c++ visual-studio-2008 dll permissions

我在Visual Studio 2008中使用C ++生成了一个Win32 DLL。我的所有函数都是在新DLL本机的唯一类中定义的。某些函数声明为private,其他函数声明为public。我正在使用Dependency Walker来客观地验证我的DLL中函数的可访问性。我的班级被宣布为__declspec(dllexport) MyClass { /* ... */ };。这是否意味着所有类函数都可以公开访问,无论其权限如何?

是否可能需要设置编译/项目选项以在已编译的DLL中强制执行隐私权限?

3 个答案:

答案 0 :(得分:4)

是的,编译器依赖于带有类定义的.h文件的完整性来强制类成员的隐私。如果有人修改了类定义,那么加载器将非常乐意链接这些私有函数。

答案 1 :(得分:2)

Access说明符是纯编译器前端功能。它们不会显示在生成的代码中。

为了在代码中使用您的类,用户需要类定义,通常以一个或多个.h文件的形式提供。访问说明符在那里,它阻止类的用户访问私有部分 - 除非他们修改标题

您的类具有来导出所有成员函数,甚至是私有函数,因为它们可以从公共内联函数中引用。内联函数的代码扩展到调用者的代码中。因此,在机器代码级别,您的类的 用户实际上可能必须能够调用私有函数

答案 2 :(得分:0)

否 - 只能从外部看到使用__declspec(dllexport)导出的班级的公开成员。

http://msdn.microsoft.com/en-us/library/a90k134d.aspx

  

导出所有公共数据   成员和成员的职能   类,关键字必须出现在   类名左侧如下:

class __declspec(dllexport) CExampleExport : public CObject
{ ... class definition ... };