导出类 (DLL) 中静态数据成员的可访问性?

发布于 2025-01-06 13:35:03 字数 557 浏览 1 评论 0原文

假设我有这个类:

class __declspec(dllexport) MyClass
{
  public:
    static int Bar;
    static MyOtherClass Foo;
  private:
    static int OtherStuff;
};

我有一些问题(我正在使用 MSVC 编译器):

  1. 导入此类的客户端是否可以访问静态成员“Bar”?
  2. 静态成员“OtherStuff”也会被导出吗?如果不是,这是否是由于访问修饰符 private: 造成的?
  3. 如果类 MyOtherClass 未使用 __declspec(dllexport) 定义,我相信这意味着 MSVC 编译器将发出警告 C4251,但确实如此这意味着导入此类的客户端将无法访问变量 Foo 吗?

我基本上只是在脑海中运行各种场景,试图仅根据静态数据成员来找出 DLL 类接口中导出的内容和未导出的内容(因此无法访问)。

Suppose I have this class:

class __declspec(dllexport) MyClass
{
  public:
    static int Bar;
    static MyOtherClass Foo;
  private:
    static int OtherStuff;
};

I have some questions (I'm using an MSVC compiler):

  1. Will the static member "Bar" be accessible to clients that import this class?
  2. Will the static member "OtherStuff" also be exported? If not, is this due to the access modifier, private:?
  3. If the class MyOtherClass is not defined with __declspec(dllexport), I believe this means warning C4251 will be issued by the MSVC compiler, but does this mean that variable Foo will not be accessible to clients that import this class?

I'm basically just running various scenarios through my mind, trying to figure out what is and what isn't exported (and thus inaccessible) in a DLL class interface in terms of static data members only.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

魂归处 2025-01-13 13:35:04

对于代码:

class MyOtherClass
{
public:
    int something;
};

class __declspec(dllexport) MyClass
{
  public:
    static int Bar;
    static MyOtherClass Foo;
  private:
    static int OtherStuff;
};

int MyClass::Bar = 0;
MyOtherClass MyClass::Foo;
int MyClass::OtherStuff = 0;

我在 Dependency Walker 中得到以下内容:

class MyClass & MyClass::operator=(class MyClass const &)
int MyClass::Bar
class MyOtherClass MyClass::Foo
int MyClass::OtherStuff

显然变量 MyClass::Foo 确实已导出,但类 MyOtherClass没有。我不确定如果您尝试从该静态变量访问 MyOtherClass::something 在这种情况下会发生什么。

For the code:

class MyOtherClass
{
public:
    int something;
};

class __declspec(dllexport) MyClass
{
  public:
    static int Bar;
    static MyOtherClass Foo;
  private:
    static int OtherStuff;
};

int MyClass::Bar = 0;
MyOtherClass MyClass::Foo;
int MyClass::OtherStuff = 0;

I get the following in Dependency Walker:

class MyClass & MyClass::operator=(class MyClass const &)
int MyClass::Bar
class MyOtherClass MyClass::Foo
int MyClass::OtherStuff

Apparently variable MyClass::Foo is indeed exported, but class MyOtherClass is not. I'm not sure what happens in this case if you try to access MyOtherClass::something from that static variable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文