访问由def文件导出的静态变量时崩溃

时间:2019-02-06 08:55:48

标签: c++ visual-c++ dll

我正在使用def文件从dll中导出一些静态函数和变量。导入dll后访问静态变量时,程序崩溃。任何想法为什么会这样?我正在使用VS2017,Windows SDK 10.0.17763.0。

library.h

struct DLLEXPORT A {
  static int a;
  static int get();
};

struct B {
  static int b;
  static int get();
};

library.cpp

int A::a = 0; 
int A::get() {return a;}

int B::b = 0;
int B::get() {return b;}

library.def

LIBRARY

EXPORTS
  ?b@B@@2HA
  ?get@B@@SAHXZ

main.cpp

int main() {
  int a = A::get(); // Works fine
  int b = B::get(); // Works fine

  A::a = 1; // Works fine
  B::b = 1; // CRASH (Access violation writing location ...)
  return 0;
}

1 个答案:

答案 0 :(得分:3)

我认为def文件条目缺少DATA属性,因此B::b被视为通常是只读的代码:

?b@B@@2HA DATA