Я застрял на исправлении устаревшего приложения Visual C ++ 6. В исходном коде C ++ DLL я поместил
extern "C" _declspec(dllexport) char* MyNewVariable = 0;
что приводит к тому, что MyNewVariable отображается (красиво не декорировано) в таблице экспорта (как показано dumpbin / exports blah.dll). Однако я не могу понять, как объявить переменную, чтобы получить к ней доступ в исходном файле C. Я пробовал разные вещи, в том числе
_declspec(dllimport) char* MyNewVariable;
но это дает мне ошибку компоновщика:
неразрешенный внешний символ «__declspec (dllimport) char * MyNewVariable» (__imp_? MyNewVariable @@ 3PADA)
extern "C" _declspec(dllimport) char* MyNewVariable;
как было предложено Тони (и как я пробовал раньше) приводит к другому ожидаемому оформлению, но до сих пор не удалил его:
неразрешенный внешний символ __imp__MyNewVariable
Как написать объявление, чтобы переменная C ++ DLL была доступна из приложения C?
Ответ
Как указали botismarius и другие (большое всем спасибо), мне нужно было связать DLL с .lib. Чтобы имя не искажалось, мне нужно было объявить его (в источнике C) без декораторов, а это значит, что мне нужно было использовать файл .lib.