1

Regsvr32 は、DLL プロジェクトのビルド後のイベントとして失敗します。

ビルド後のイベント: regsvr32 /s /c "$(TargetPath)" (引用符なしでも試しました)。

/s を削除すると、エラー メッセージ LoadLibrary("...") が失敗しました - 指定されたモジュールが見つかりませんでした。

コマンド プロンプトから regsvr32 を実行すると、結果は成功です。「BAT000019.bat」ファイルをコピーして実行するか、直接実行すると、「DllRegisterServer in ...dll が成功しました」というメッセージが表示されます。DLL を Dependency Walker にロードしましたが、問題は見つかりませんでした。これは過去に機能していましたが、突然問題が発生し始めました。同じビルド後のイベントを持つプロジェクトが約 50 ありますが、この問題があるのは約 3 つだけです。DLL ファイルは、bat ファイルが生成された時点で存在します (使用中の可能性があります???)。

生成されたバット ファイルに問題はありません。

@echo off
regsvr32 /c "C:\ ... .dll"
if error level 1 goto VCReportError
goto VCEnd
:VCReportError
echo Project : error PRJ0019: A tool returned an error code from "Performing registration"
exit 1
:VCEnd

その他の情報: OS: Windows XP SP3。IDE: VS 2003 Pro (最新)。言語: C++

ビルド後のイベントを削除することもできますが、一部の新しいプログラム デバッガー用に残しておきます。

誰でもこれを修正する方法について何か考えがありますか?

私が試したその他のこと: ビルド後のイベントでの DLL への相対パス。(失敗) ビルド後のイベントでの DLL への絶対パス。(失敗) 引用符なしで (絶対パスにスペースが含まれていない)。(失敗)

4

1 に答える 1

1

あなたのプロジェクトは 1 つの DLL だけで作成されたものではないと思います。作成している DLL は他のライブラリに依存している可能性があります(DependencyWalker で確認し、LoadLibrary/GetProcAddressも確認してください) が、それらは dll のビルド後のイベントには存在しません。

出力ディレクトリのコマンド プロンプトから実行すると、dll に必要なものがすべて揃っているので、登録できます。

私が知っていることについては、ソリューションのビルド後のイベントを設定できないため、プロジェクトの依存関係/ビルド順序を確認してください)。依存関係なしで出力ディレクトリにdllを単独で登録しようとしているのではないと思います(バッチ内のパスは一致する必要があります$(TargetPath)

于 2012-04-06T13:48:46.160 に答える