В исходном коде dll у вас должна быть эта реализация, чтобы файл .lib экспортировал символ:
extern "C" _declspec(dllexport) char* MyNewVariable = 0;
Клиент c должен использовать заголовок с этим объявлением, чтобы клиентский код импортировал символ:
extern "C" _declspec(dllimport) char* MyNewVariable;
Этот заголовок вызовет ошибку компиляции, если # include-ed в исходном коде dll, поэтому он обычно помещается в заголовок экспорта, который используется только для экспортируемых функций и только клиентами.
Если вам нужно, вы также можете создать «универсальный» заголовок, который можно включить в любое место, которое выглядит следующим образом:
#ifdef __cplusplus
extern "C" {
#endif
#ifdef dll_source_file
#define EXPORTED declspec(dllexport)
#else
#define EXPORTED declspec(dllimport)
#endif dll_source_file
#ifdef __cplusplus
}
#endif
EXPORTED char* MyNewVariable;
Тогда исходный код DLL выглядит так:
#define dll_source_code
#include "universal_header.h"
EXPORTED char* MyNewVariable = 0;
А клиент выглядит так:
#include "universal_header.h"
...
MyNewVariable = "Hello, world";
Если вы делаете это много, монстр #ifdef наверху может перейти в export_magic.h, и universal_header.h становится:
#include "export_magic.h"
EXPORTED char *MyNewVariable;