2011-10-12 11 views
5

QTで書かれたプログラムはうまくいきます。しかし、プログラムによってロードされたdllはbonjourを使用するため、dnssd.dllに間接的に依存します。ボンジュールは、プログラムを実行するマシンにインストールされていない場合には、dnssd.dllがあなたの コンピュータから欠落しているため、dll見つからないエラーメッセージの改善

プログラムが起動することはできませんと言うだろう。プログラムを再インストールして問題を解決してください。

このDLLはLoadLibraryなどで読み込まれません。バイナリをスタブにリンクするので、int mainの前に自動的にロードされます。

明らかにプログラムを再インストールしても問題は解決されません。私にとっては、bonjourをインストールする必要があるとはっきり言っていますが、ほとんどのユーザーにとっては、これは極端に秘密です。

このエラーメッセージは、「このアプリケーションを正しく動作させるためにBonjourをインストールする必要があります。ダウンロードするには[insert-url-here]」にアクセスしてください。

DLLがこれをロードしてより良いエラーメッセージを表示できないことを検出する方法はありますか?

+2

なぜあなたはインストーラのBonjourの(あなたが使用しているインストーラの種類を知らなくても、どのように言うことができない)、または類似した何かをパッケージ化しませんか? –

+1

いいアイデア。人々はそれが何であるか分からないので、アンインストールする傾向があります。また、それは面倒で、より複雑で壊れやすいインストーラを作成します。 Bonjourが既にインストールされていることを告げるまでにはかかります。 – vidstige

+1

代わりに、もっと複雑で壊れやすいアプリケーションを好むでしょうか?優れたインストーラフレームワークは、これらの問題のほとんどに対して堅牢なソリューションを提供します。これは未解決の問題ではありません。 –

答えて

5

ロードを遅延させるように設定し、できるだけ早く(ロードが発生する前に)、LoadLibraryを使用してロードして問題を報告してください。

http://msdn.microsoft.com/en-us/library/151kt790.aspx

+0

だから、基本的には、スタブにリンクされたDLLが読み込まれないときを検出する方法がないと言っていますか? – vidstige

+1

ロードが自動的に行われるようにすると、私はそうは思わないでしょうが、リンク設定を変更してから数行のコードを追加すれば、可能です。 –

+1

実際にGetProcAddressなどの呼び出しを行う必要はありません。ライブラリがそこにあることを確認するためにロードするつもりです。通常、ロードプロセスが成功することを知っているように関数を呼び出します。遅延ロードはDLLを実際に使用するまでランタイムによって実行されるLoadLibraryを移動するだけです。 –

関連する問題