2

環境: VS2008、C++ ATL COM、64 ビット、Windows 7

古い COM インターフェイスからメソッドを削除しようとしています。*.idl を変更し、関連する *.h および *.cpp 実装ファイルを変更し、メイン プロジェクトの .h ファイルからも削除します。プロジェクト全体で古いメソッド名を検索できます-表示されず、コンパイル/リンクは正常に行われます。ただし、オブジェクト ブラウザを使用してコンパイル済みの DLL を確認すると、dang メソッドがまだ残っています。.NET プロジェクトで DLL を「参照」すると、メソッドが表示されます。.NET コードがメソッドを使用しようとすると、メモリ例外が発生します (これは理にかなっています)。IDL を変更し、メソッド コードを削除し、結果としてコンパイルされた DLL を正しくする方法を理解することはできません。

メソッドが潜んでいるのは一体どこで、既存の ATL 生成 COM インターフェイスからメソッドを削除する別の方法はありますか? 私は困惑しています!ありがとう!

4

1 に答える 1

3

古い DLL モジュールの登録を解除し、新しいモジュールを登録しましたか? レジストリに一貫性のないエントリがあるようです。

また、コンパイル時に古いコピーが含まれていないことを確認できるように、コンパイル済みのヘッダーなどが配置されていないことを確認してください。

古いファイルを削除し忘れた場合に備えて、コンパイルする前に完全なビルド ディレクトリ (デバッグ/リリース) を削除するのがおそらく最善の方法です。

.dll がロードされているパスも確認してください。オブジェクト ブラウザでそれを確認し、それをレジストリ エントリと比較します。多分あなたは以前に32ビット版をやったのですか?

于 2011-03-10T04:09:22.240 に答える