掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
リンクエラー対処について (ID:72063)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
VC2005 MFCでダイアログベースのアプリとDLLを 作成しています。 リンクエラー対処についてお教え頂けないでしょうか。 ダイアログベースのアプリをプロジェクトのプロパティで「文字セット:Unicode文字セットを使用する」 実装コード void CMemReadDlg::OnDestroy() { CDialog::OnDestroy(); // TODO: ここにメッセージ ハンドラ コードを追加します。 TCHAR bufName[][4] = {_T("1"), _T("2"), _T("3"), _T("4")}; CString str; for(int i = 0; i < 4; i++) { str = bufName[i]; //共有メモリ削除 ShareMemClose(str); ← DLL定義関数 } } DLLをプロジェクトのプロパティで「文字セット:マルチ バイト文字セットを使用する」でビルド。 実装コード __declspec(dllexport) void ShareMemClose(CString bufName) { //バッファ名変換(CString → int変換) int no = _ttoi(bufName); //共有メモリ名のチェック if( no <= 0 || 5 <= no ) { // AfxMessageBox( "削除するメモリ名が不正" ); CLogCtrl::WriteLog( "ShareMemClose:削除するメモリ名が不正" ); return; } // マッピングを解除 UnmapViewOfFile( memData[no-1].shareBufP ); // 共有メモリハンドルをクローズ CloseHandle( memData[no-1].m_hMapping ); // ミューテックスオブジェクトの破棄 delete memData[no-1].m_pMutex; } ダイアログベースのアプリをビルドすると以下のリンクエラーが発生してしまいます。 error LNK2019: 未解決の外部シンボル "__declspec(dllimport) void __cdecl ShareMemClose(class ATL::CStringT<wchar_t,class StrTraitMFC_DLL<wchar_t,class ATL::ChTraitsCRT<wchar_t> > >)" (__imp_?ShareMemClose@@YAXV?$CStringT@_WV?$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z) が関数 "public: void __thiscall CMemReadDlg::OnDestroy(void)" (?OnDestroy@CMemReadDlg@@QAEXXZ) で 参照されました。 但し、DLLのプロジェクトのプロパティで「文字セット:Unicode文字セットを使用する」にするとエラーは出ません。 しかし、DLLは他の複数アプリ(「文字セット:マルチ バイト文字セットを使用する」)からも 呼ばれるので「文字セット:マルチ バイト文字セットを使用する」のままにしておきたのです。 また、ダイアログベースのアプリも「文字セット:Unicode文字セットを使用する」ままにしておきたのです。 宜しくお願いいたします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.