我在Visual Studio 2008中使用C ++生成了一个Win32 DLL。我的所有函数都是在新DLL本机的唯一类中定义的。某些函数声明为private
,其他函数声明为public
。我正在使用Dependency Walker来客观地验证我的DLL中函数的可访问性。我的班级被宣布为__declspec(dllexport) MyClass { /* ... */ };
。这是否意味着所有类函数都可以公开访问,无论其权限如何?
是否可能需要设置编译/项目选项以在已编译的DLL中强制执行隐私权限?
答案 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 ... };