いつもお世話になっています。ggです。
DLL作成中ですが、
なんか原因で、リンク中以下のエラーメッセージボックスがでました。
エラーメッセージボックスのタイトルは
ADebug.exe -コンポーネットが見つかりません
ボックス内の内容は
DrawPolygonDLL.dllが見つからなかったため、このアプリケーションを開始
できませんでした。アプリケーションをインストールし直すとこの問題は解決
される場合があります。
OKボタンを付いています
前は、リンクがうまくできたのですが、
調べたら、DrawPolygonDLL.dllは¥Aの下にあるのです。
どう解決するのでしょうか。
よろしくお願いします。
環境:.Net MFC使用 WinXP
> なんか原因で、リンク中以下のエラーメッセージボックスがでました。
メッセージをみると、これはデバッグを開始した時のメッセージであり、リンクは終了している
ようですが?
上記メッセージが出るのは、exeを起動したときに、そのexeからみてdllを探し出せていないよ
うです。dllを作成したexeを同じ場所に作成するように設定すれば解決するでしょう。
maruさん、
ご返事ありがとう。
ご指摘通り、うまくできました。
ちなみに、DLL*.Lib と DLL*.dllを自動的に
Copyの設定どこにあるのでしょうか。
いま、いちいち手動でコピーしているのですが、
結構めんどくさい。
よろしくお願いします。
> ちなみに、DLL*.Lib と DLL*.dllを自動的に
> Copyの設定どこにあるのでしょうか。
ソリューションエクスプローラでプロジェクト右クリック、[プロパティ]-[構成プロパティ]-
[ビルドイベント]-[ビルド後のイベント]の[コマンドライン]にcopy $(TargetPath) 転送
先を入力。
# DLLとEXE(テスト用?)を同時に作成しているならば、各々のプロジェクトを同一ソリュー
ションで作成しておけば、同一の$(TargetDirectory)に作成されるはず。
VCのバージョンにもよると思うが。
「ビルド後のイベント」について設定すると良いでしょう。
maru さん、たいちうさん
ご返事ありがとう。
># DLLとEXE(テスト用?)を同時に作成しているならば、各々のプロジェクトを同一ソ
>リュー
>ションで作成しておけば、同一の$(TargetDirectory)に作成されるはず。
はい、BDLLとEXEは同一ソリューションで作成しています、
copy \DrawPolygonDLL\Debug\*.dll \Exe\.
あるいは、
copy DrawPolygonDLL\Debug\DrawPolygonDLL.dll Exe\
結局
DrawPolygonDLL.dllは Exe¥にコピーされなかった。
copy コマンドの使い方が間違っているのでしょうか。
よろしくお願いします。
> 結局
> DrawPolygonDLL.dllは Exe¥にコピーされなかった。
ビルドログはどう出力されていましたか? コピー失敗?
相対パスの指定方法が違っているのかな?
ファイル名に相対パスを使用する場合、カレントがどこにいるかを考えないと正しくコピー出来
ません。
で、カレントどこになっているかを考えなくて済むようにマクロが定義されています。
コマンドラインを入力するエディットボックスの右端に...ボタンがあるので、そのダイアログ
でマクロボタンをおして見てください。それらのマクロの組み合わせを使えば正しくコピー出来
るでしょう。
# 前回書いた$(TargetDirectory)は$(TargetDir)の間違い。
上手くいかないときは
echo on
echo $(TargetDirectory)
copy \DrawPolygonDLL\Debug\*.dll \Exe\.
とかやって試行錯誤したことある。
俺も各々のプロジェクトを同一ソリューションが楽だと思う。
#でもVC6は駄目だったような。
ごちゃごちゃ悩むならバッチファイルのひとつでも書いて、
実行すればいい。
ったく、リンクエラー如き自身で直せないでどうするよ。
今回の話は実際にはリンクエラーではなくて実行時のエラーなわけですが、
実際のリンクエラーならリンカーが何をしていて出てきたエラーの原因は
何かというのを一つ一つ覚えていかないと難しいでしょうねぇ。
自己解決ができるが一番早いし、効率がいいのは当たり前として
最初からこれができる人はほとんどいませんし、
この辺がわからないというのは、みんな通る道だと思います。
大事なことは自分の失敗から学んで次に生かすことでしょう。
だから同じような質問を繰り返さなくてもよいように
毎回しっかりと理解するようにするとよいと思います。
あと、Dllに関してはOS周りの知識も多少必要かなと思います。
Windowsで実行ファイルが動く時に必要なDllをどのように探して
読み込んでいるのかとそういう部分が理解できるようになると
今回のような問題も自分で解決できるようになりますよ。
ソフトを組むというのは、プログラミング言語の知識だけでは
全然足りなくて、それが動いているOSの知識とか実際には
幅広い知識が必要になります。
いっぺんに勉強することは難しいと思いますが、
失敗したときを良い機会だと思って一つ一つ覚えていくと
良いと思います。
たいちうさん、maruさん、wclrp ( 'o')さん、PATIO さん
ご返事ありがとう。
「ビルド後のイベント」
copy DrawPolygonDLL\Debug\*.dll $(TargetDir)
成功しました。
同じく
「ビルド前のイベント」
copy DrawPolygonDLL\Debug\*.Lib $(OutDir)
も成功しました。
結構楽にしました。
ほんとに、ありがとうございました。
>大事なことは自分の失敗から学んで次に生かすことでしょう。
>だから同じような質問を繰り返さなくてもよいように
>毎回しっかりと理解するようにするとよいと思います。
そうですね、わかりました。
みなさん、ありがとうございました。
解決のチェックを追加しました。