c – 访问使用def文件导出的静态变量时发生崩溃

我正在使用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;
}
最佳答案
我认为def文件条目缺少DATA属性所以B :: b被视为通常只读的代码:

?b@B@@2HA DATA

转载注明原文:c – 访问使用def文件导出的静态变量时发生崩溃 - 代码日志