1
私はC#Webサービスで使用されている従来のC++コンポーネントを開発中です。 C#プロジェクト参照は有効ですが、実行時にCOMオブジェクトが作成されたときに "CLSID参照に失敗しました"という例外がスローされました。 CLSID解決が機能するためには、DLLがある場所へのルートパスが必要でした。InProcServer32キーがDLLへのフルパスを定義するときに、PATH環境変数にCOM DLLへのパスが必要なのはなぜですか?
CLSIDルックアップを動作させるには、PATH環境変数にDLLのパスを指定する必要があるのはなぜですか?
COMオブジェクトが正しく登録されていない可能性があります。パスはCLSIDルックアップには影響しません。おそらくC#プロジェクトで実際のエラー –
@ M.Mに対応しないエラーメッセージが表示されます。登録無料のCOMである可能性があります。私はnewfangledものを使ったことはありませんが、実行可能ファイルのディレクトリにない場合、パスルックアップを介して見つかったDLLに依存しなければならないと思います。 –
私はチェックして、DLLが正しく登録されています。 DLLが存在するフォルダへのパスを追加した後、Procmon.exeを実行し、CLSIDのレジストリ検索が成功したことを確認しました。その後、PATH環境変数からDLLパスを削除し、同じCLSIDルックアップが失敗するのを発見しました。 'Depends.exe'は、問題のDLLが同じフォルダ内の他のDLLに依存していることを示しており、パスがPATH環境変数になければならない理由がわかりました。 Id 'はむしろそれを仮定するよりも確かです。 – cg0x1