実行ファイルからDLLが呼べずコンパイルエラー

解決


ヒカル  2003-09-29 11:49:24  No: 52218  IP: [192.*.*.*]

続け様にトピを立ててしまって申し訳ありません。
一連の流れなのですが、内容が全く異なるため別にさせて頂きました。

DLLの関数を参照した実行ファイルをコンパイルできなくて困っています。

ヘッダファイルを使わず、以下のように定義しています。

コンパイル済みDLLは実行ファイルやプロジェクトと同ディレクトリに置きました。
これでコンパイルエラーになっている状況です。

ちなみに、DLLのコンパイルはできていて
VBからは呼び出せています、故に、実行ファイルからの参照だけが
できていないものと思われます。

*.defファイルを使ってみてもダメでした。

[DLL]
#define DllExport __declspec( dllexport )

DllExport void CALLBACK Hook(void);
DllExport void CALLBACK UnHook(void);

[実行ファイル]
extern void CALLBACK SetHook(HWND PutHandle);
extern void CALLBACK FreeHook(void);

このように、DLLの関数が見えない状況です。

[エラー詳細]
TextInsert.obj : error LNK2001: 外部シンボル ""void __stdcall Hook(void)" (?FreeHook@@YGXXZ)" は未解決です
TextInsert.obj : error LNK2001: 外部シンボル ""void __stdcall UnHook(void)" (?SetHook@@YGXPAUHWND__@@@Z)" は未解決です
Debug/TextInsert.exe : fatal error LNK1120: 外部参照 3 が未解決です。

どう対処すれば良いでしょうか?
アドバイス宜しくお願いします。

編集 削除
YuO  2003-09-29 13:05:30  No: 52219  IP: [192.*.*.*]

インポートライブラリはリンクしていますか?

あと,
extern
ではなく,
__declspec(dllimport)
を利用します。


最後に,
> これでコンパイルエラーになっている状況です。
ではないですね。リンカのエラーです。
コンパイラでのエラーかリンカでのエラーかは,原因特定の為の手段を決定する重要な情報です。

編集 削除
ヒカル  2003-09-29 13:32:33  No: 52220  IP: [192.*.*.*]

YuOさん

アドバイスありがとうございます。

>インポートライブラリはリンクしていますか?

これはどのようにするのでしょうか?

__declspec(dllimport) void CALLBACK SetHook(HWND hWnd);
__declspec(dllimport) void CALLBACK FreeHook(void);

こういう事でしょうか?

>ではないですね。リンカのエラーです。
>コンパイラでのエラーかリンカでのエラーかは,原因特定の為の手段を決定>する重要な情報です。

そうでした、たいへん失礼しました。

このような情報は正確にお伝えしなければなりませんね、
以後、気をつけたいと思います。

インポートライブラリが原因かもしれません、
__declspec(dllimport)に修正しましても以前としてリンカエラーになっています。

編集 削除
ヒカル  2003-09-29 14:21:30  No: 52221  IP: [192.*.*.*]

実行ファイルにて
#pragma comment(lib, "XXXXX.lib")

extern void CALLBACK SetHook(HWND hWnd);
extern void CALLBACK FreeHook(void);

これでリンクできましたが、これで良いのでしょうか?

__declspec(dllimport) void CALLBACK SetHook(HWND hWnd);
__declspec(dllimport) void CALLBACK FreeHook(void);

もちろんこれでもOKでした。

まだ、別の問題がありこれでできたのかどうかの判断までは
できていません。

編集 削除
YuO  2003-09-29 16:20:23  No: 52222  IP: [192.*.*.*]

> 実行ファイルにて
> #pragma comment(lib, "XXXXX.lib")

これでもよいですし,
リンカにXXXXX.libを指定する方法でも良いです。

編集 削除
ヒカル  2003-09-29 17:13:01  No: 52223  IP: [192.*.*.*]

YuOさん

>これでもよいですし,
>リンカにXXXXX.libを指定する方法でも良いです。

[プロジェクト]-[設定]-[リンク]の設定のことですね。

一応どちらも試してみました。

どうもありがとうございましたm(__)m

編集 削除