Скажем, у меня есть 2 простых класса A
и C
, также у меня есть глобальные внешние переменные в виде указателей на A
и C
. Код:Как использовать общедоступные глобальные DLL-переменные?
//global.h
#pragma once
#include "A.h"
#include "C.h"
struct A;
struct C;
extern A* external_a;
extern C* external_c;
/////////////////////////////////////////
//A.h
#pragma once
struct A {
void get();
};
/////////////////////////////////////////
//A.cpp
#include "A.h"
void A::get() {}
/////////////////////////////////////////
//C.h
#pragma once
# include "global.h"
struct C {
void doit();
};
/////////////////////////////////////////
//C.cpp
# include "C.h"
void C::doit() { external_a->get(); }
/////////////////////////////////////////
Я перечислял только DLL-код. Дело было в том, что пользователь DLL должен предоставить (объявить) свой код EXE, скажем, глобальные переменные main.cpp для моего используемого DLL-кода. Таким образом, пользователь не находится в одном проекте, в то время как я хочу использовать внешние переменные в нескольких файлах внутри моего проекта DLL.
я получаю две ошибки из этого кода относительно unresolved external symbol "struct A * external_a"
Я попытался написать __declspec(dllexport)
в классе defenitions и после external
ключевого слова. Это не помогает исправить ошибку. Поэтому я задаюсь вопросом, что делать, чтобы составить такой проект?
Что присутствует внутри "хиджры". Если у вас определена A * external_a, ее следует сначала объявить с использованием ключевого слова extern. – Sumeet
Я не вижу, где определены 'external_a' и' external_c'. –
Вы пытались использовать очевидный 'extern __declspec (dllimport) A * external_a;' и '__declspec (dllexport) A * external_a;' в DLL? («очевидным» я имею в виду «очевидное, если вы уже знаете, как экспортировать функции) – immibis