Сбой при доступе к статической переменной, экспортированной с помощью файла def - PullRequest
0 голосов
/ 06 февраля 2019

Я использую файл 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 голосов
/ 06 февраля 2019

Я думаю, что в файле def отсутствует атрибут DATA, поэтому B::b рассматривается как код, который обычно доступен только для чтения:

?b@B@@2HA DATA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...