У меня есть проект Visual Studio C++, содержащий основную программу и DLL-модуль. DLL, имеет класс со следующим определением:C++ dllimport: нерешенные внешние с статическими полями
// .h
#ifdef _USRDLL
#define DLLAPI __declspec(dllexport)
#else
#define DLLAPI __declspec(dllimport)
#endif
class DLLAPI EClass
{
public:
static int value;
static int get_value();
};
// .cpp
int EClass::value = 1;
int EClass::get_value()
{
return value;
}
Проект DLL успешно компилируется, оба символа (значение и get_value) наблюдаются на Dependency Walker.
В основной программе, я могу вызвать статическую функцию get_value
int v = EClass::get_value(); // Ok, v = 1
, но когда я пытаюсь получить доступ поле value
непосредственно
int v = EClass::value; // Error
Я получаю сообщение об ошибке
LNK2001 unresolved external symbol "public: static int EClass::value" ([email protected]@@2HA)
Можно избежать использования аксессуаров для статических полей?
Похоже, что вы не экспортируете статический файл, пытались ли вы добавить 'DLLAPI' перед его объявлением? (за пределами класса) – SHR
, возможно, также нужно добавить в заголовок: 'extern DLLAPI int EClass :: value;' сообщить вашему приложению dllimport. – SHR
Да, я пробовал это без успеха. Статическое поле экспортируется правильно: у меня есть доступ к нему с помощью метода accessor, и я вижу это поле в DLL. –