1

COM DLL を作成する Visual C++ 6 プロジェクトがあります。これは私が何年も使用していない古いプロジェクトですが、DLL の一部の機能を更新するために最近戻ってきました。私が抱えている問題は、プロジェクトによって作成された DLL を (regsvr32 を使用して) 手動で登録しようとすると、まったく応答がないことです。成功するとは言いませんし、失敗するとも言いません。DLL がレジストリに追加されていないことを確認しました。regsvr32 で確認メッセージが表示されない状況は見たことがありません。

また、DLL はプロジェクトで自己登録するように設定されており、これを実行しようとしてもメッセージは表示されません。

このプロジェクトには長い間触れていませんでしたが、最後に触れたときは問題なく動作しました。今、私はそれに戻ってきました、そして突然、私はこの問題を抱えています. Visual C++ プロジェクトによって作成された DLL が、現在のバージョンの Windows と互換性がないかのようです。開発ソフトをSP6にアップデートしましたが状況は変わりません。

作成された DLL を指しているときに Depends on regsvr32 を実行すると、次のメッセージが表示されます。

LoadLibraryExW("C:\Source32\BIS\Projects\ALFA\DigiPixSvc\DigiPixObj\Debug\DigiPixObj", 0x00000000, LOAD_WITH_ALTERED_SEARCH_PATH) が NULL を返しました。エラー: オペレーティング システムは %1 を実行できません (182)。

なぜこれが起こっているのか、それを修正するために何ができるのか誰か教えてもらえますか?

4

1 に答える 1

0

免責事項:私はもうVS 6.0をインストールしていないので、いくつかのGoogle検索を使用して、VC 6.0ダイアログの正確な手順を提供する必要があります。そのため、この情報の一部は不正確である可能性があります。私はそれが正しいと信じています-それはあなたが現在のIDEで、VC6.0のためだけに行うことです。

DLLのデバッグの問題を経験する前に、 Dependency Walkerを実行して、すべての依存関係がマシン上にあることを確認してください。zippy32でDependencyWalkerを実行しないでください。重要なのはDLLに依存関係があるかどうかです。それらが欠落している場合、zippy32はDLLをロードできません。

DLLを登録しようとしたときに、DLLがzippy32によってロードされているかどうかを確認するには、DLLRegisterServer()関数をデバッグして、そこで何が起こるかを確認する必要があります。これは、COM DLLが持つ必要のある4つのエントリポイントの1つであり、 DLLが登録されようとしています。これを行うには、プロジェクトのスタートアッププログラムとしてzippy32を設定し、コマンドラインパラメーターとしてdebug-builtDLLへのフルパスをzippy32に渡す必要があります。

  • プロジェクトのプロジェクトプロパティを表示します。
  • [デバッグ]タブに移動します。
  • [一般]カテゴリが選択されていることを確認します。
  • [デバッグセッションの実行可能ファイル]テキストボックスに、zippy32へのフルパスを入力します。
  • [プログラム引数]テキストボックスに、DLLのデバッグバージョンへのフルパスを入力します。デバッグ中にシンボル情報を確認できるように、DLL用のPDBファイルがあることを確認してください。
  • の最初の行にブレークポイントを設定しますDLLRegisterServer()。この関数のコードは、作成方法に応じて長い場合と短い場合があります。ウィザードによって生成されたもの、開発者によって作成されたものなどです。
  • デバッグを開始します。

ブレークポイントがヒットし、登録コードをステップスルーして、どの時点で失敗するかを確認できるはずです。

于 2012-10-30T21:38:06.137 に答える