【发布时间】:2012-02-16 22:19:19
【问题描述】:
假设我有这个类:
class __declspec(dllexport) MyClass
{
public:
static int Bar;
static MyOtherClass Foo;
private:
static int OtherStuff;
};
我有一些问题(我使用的是 MSVC 编译器):
- 导入此类的客户端是否可以访问静态成员“Bar”?
- 静态成员“OtherStuff”是否也会被导出?如果不是,这是因为访问修饰符
private:? - 如果类
MyOtherClass没有用__declspec(dllexport)定义,我相信这意味着警告C4251将由MSVC编译器发出,但这是否意味着变量Foo将无法被导入的客户端访问这堂课?
我基本上只是在脑海中运行各种场景,试图仅就静态数据成员而言,找出 DLL 类接口中哪些是导出的,哪些不是导出的(因此无法访问)。
【问题讨论】:
-
您可能想要构建一个测试 DLL,然后在其上运行 dumpbin /exports - 这将确切地告诉您发生了什么。
-
@Bukes 有什么方法可以让我使用 Dependency Walker 进行检查吗?
-
当前版本的 Dependency Walker 中的导出窗格将显示从 DLL 导出的所有内容,包括变量和类。您还可以“取消装饰符号”,这会删除一些名称修饰。
标签: c++ visual-c++ dll dllimport dllexport