3

Visual Studio 2010 でシェル拡張機能を作成しました。これは、コンテキスト メニュー ハンドラーとファイル アイコン ハンドラーを実装しています。

Visual Studio を搭載したコンピューターでは、問題なく動作します。しかし、他のコンピューターでは、MyShellExt.dll の登録が失敗し、メッセージが表示されます。

【ウィンドウタイトル】

RegSvr32

[コンテンツ]

モジュール「MyShellExt.dll」の読み込みに失敗しました。

バイナリが指定されたパスに格納されていることを確認するか、デバッグして、バイナリまたは依存する .DLL ファイルに問題がないか確認してください。

指定されたモジュールが見つかりませんでした。

[わかった]

依存関係を調べたところ、次のファイルが MyShellExt.dll と同じフォルダーにある必要があることがわかりました: msvcr100.dllmsvcp100.dllatl100.dll

これは、このライブラリをインストール パッケージに含める必要があることを意味します。

これらのライブラリの使用を無効にする方法は?

4

1 に答える 1

7

これらのライブラリは、C ランタイム、C++ ランタイム、および ATL ランタイムです。最初の 2 つは、プログラムの実行を開始するために不可欠であるため、オフにすることはできません。ただし、それらに静的にリンクできるため、DLL として持ち歩く必要はありません。これを行うには、プロジェクト設定の C/C++、コード生成、ランタイム ライブラリに移動し、「マルチ スレッド DLL」または「マルチ スレッド デバッグ DLL」の代わりに「マルチ スレッド」または「マルチ スレッド デバッグ」を選択します。すべての設定構成(デバッグ、リリースなど)で必ずそれを行ってください

3番目のライブラリ(ATL100.dll)については、この設定の影響もあるのかもしれませんが、よくわかりません。そこからインポートされた関数の使用を停止すると、削除される可能性があります。依存関係ウォーカーは、そのライブラリから使用している関数を教えてくれます。その関数の使用をやめられない場合は、ライブラリにも静的バージョン (.dll ファイルではなく .lib ファイル) がある可能性があります。

于 2013-11-01T08:43:24.230 に答える