DLLを作ってダイアログアプリで呼び出そうとしてますが、
エラーが出てうまくいきません。
なぜか引数なしではうまくいくのにありだとうまくいきません。
どうすればOKになりますか?
○問題なしで呼び出せる
DLL側
__declspec(dllexport) int test(void);
呼び出し側
__declspec(dllimport) int test(void);
×エラーになる
DLL側
__declspec(dllexport) int test(HWND hWnd, LPWSTR pszItemID, int nItemCnt);
呼び出し側
__declspec(dllimport) int test(HWND hWnd, LPWSTR pszItemID, int nItemCnt);
エラー内容
error LNK2019: 未解決の外部シンボル
__declspec(dllimport) int __cdecl test(struct HWND__ *,wchar_t *,int) (__imp_?
test@@YAHPAUHWND__@@PA_WH@Z)
が関数 protected: virtual int __thiscall CXXXDlg::OnInitDialog(void) (?
OnInitDialog@CXXXDlg@@MAEHXZ) で参照されました。
・実はDLLはC++でなくCで書いている
・libファイルを更新せずに古いものを使用している。(DLLのプロジェクトからコピーし
ていない)
レスありがとうございます。
・実はDLLはC++でなくCで書いている
DLLプロジェクト内にはcppファイル4、cファイル1個あります。
しかし、呼び出す関数が書かれてるのはcppファイルです。
・libファイルを更新せずに古いものを使用している。(DLLのプロジェクトからコピーし
ていない)
libの日時を確認しましたがちゃんと新しいものでした。
うーん。引数をint1個にしたらエラーでないし、
HWNDとかWCHARがだめなんでしょうか…
色々考えてみて
extern Cとかを何気なくつけたら
うまくいきました。
cファイルで、
__declspec(dllexport) int test(HWND hWnd, LPWSTR pszItemID, int nItemCnt);
を書いてあるヘッダファイルをincludeしていると、
コンパイル順とかで、export関数のリンケージがCとC++の区別がつかなくなるのかも・・