访问与DEF文件导出的静态变量时崩溃

问题描述 投票:5回答:1

我使用的是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;
}
c++ visual-c++ dll
1个回答
3
投票

我觉得DEF文件条目缺乏DATA属性使B::b被视为代码仅是一般阅读:

?b@B@@2HA DATA
© www.soinside.com 2019 - 2024. All rights reserved.