О непоследовательной dll связи

Как я могу удалить эту ссылку, предупреждающую? Вы видите сегмент кода, который вызывает это предупреждение.

static AFX_EXTENSION_MODULE GuiCtrlsDLL = { NULL, NULL };
//bla bla
// Exported DLL initialization is run in context of running application
    extern "C" void WINAPI InitGuiCtrlsDLL()
    {
     // create a new CDynLinkLibrary for this app
      new CDynLinkLibrary(GuiCtrlsDLL);
     // nothing more to do
    }

предупреждение C4273: 'InitGuiCtrlsDLL': inconsisten t dll связь

Я имею также экспорт и импортирую определения, как:

#ifdef _GUICTRLS
   #define GUI_CTRLS_EXPORT __declspec(dllexport)
#else
   #define GUI_CTRLS_EXPORT  __declspec(dllimport)
#endif
40
задан genpfault 22 January 2014 в 19:31
поделиться

2 ответа

Это предупреждение обычно вызвано дублированием определения функции с другим использованием dllimport. Вы уверены, что не делали этого?

2
ответ дан 27 November 2019 в 01:40
поделиться

Цель операторов препроцессора:

#ifdef _GUICTRLS 
   #define GUI_CTRLS_EXPORT __declspec(dllexport) 
#else 
   #define GUI_CTRLS_EXPORT  __declspec(dllimport) 
#endif 

убедиться, что заголовочный файл объявляет класс или функцию как __declspec(dllexport) в .dll, где он определен, и как __declspec(dllimport) для любой другой .dll, которая может захотеть его использовать.

Чтобы это работало, _GUICTRLS должен быть определен при компиляции экспортируемой .dll и не определен для любой другой .dll. Обычно _GUICTRLS определяется в свойствах проекта, в разделе C/C++ -> Preprocessor -> Preprocessor Definitions.

Ошибка компилятора, которую вы видите, обычно происходит потому, что либо _GUICTRLS не определена для проекта, который выполняет экспорт, либо она определена для нескольких проектов, обычно в результате вырезания и вставки из одного проекта в другой. Вы также увидите это, если _GUICTRLS определен в заголовочном файле, который включен в несколько проектов.

41
ответ дан 27 November 2019 в 01:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: