1. ホーム
  2. c++

[解決済み] DLLリンクの不整合について

2022-02-03 18:33:05

質問

このリンクの警告を消すにはどうしたらいいですか?この警告を発生させるコードセグメントが表示されます。

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' : 整合性のないDLLリンクがあります。

というようなexportやimportの定義もあるのですが。

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

解決方法は?

複数の可能性があります。

1) static AFX_EXTENSION_MODULE GuiCtrlsDLL = { NULL, NULL };

AFX_EXTENSION_MODULE を使っていますね。これは、MFC 拡張 DLL を実装していることを意味します。このような拡張DLLでは、プリプロセッサ_AFXEXTを定義する必要があります。Visual C++プロジェクトのC++コンパイラの設定でこれを設定します。

をご覧ください。

MFC拡張DLLで_declspec(dllexport)を使用する方法。 http://support.microsoft.com/kb/128199

AFX_EXTENSION_MODULE の構造体です。 http://msdn.microsoft.com/en-us/library/sxfyk0zk.aspx

TN033 MFCのDLLバージョン。 http://msdn.microsoft.com/en-us/library/hw85e4bb.aspx

2) 定義・宣言が重複している可能性があります。