2011-03-31 15 views
1

お客様には、提供されているネイティブC++ COM登録.dllを使用する古いWin32クライアントがあります。ネイティブC++ COM .dllを.NET COM .dllに置き換えます。

ネイティブの.dllを.NETバージョンに置き換えます。 .NET dllをビルドし、COMに登録しました。古い.dllから新しいものへのスワップを処理できるネイティブのC++テストクライアントがありますが、それを動作させるために再コンパイルする必要があるようです。

テストクライアントを再コンパイルする必要がある理由があるのですか、何か間違っていますか?

お客様にクライアントの再コンパイルを要求することはできません。

+0

おそらくTLBファイルまたはGUIDが異なるため、新しいインターフェイスが認識されない可能性があります。私は古いWin32クライアントが.NETを理解していないので、COMから.NETへのラッパーDLLを構築していると仮定します。 –

答えて

7

インターフェイスとクラス宣言で[Guid]属性を使用するのを忘れたのでしょうか。古いC++プロジェクトのIDLで使用されていたIIDとCLSIDを一致させる必要があります。または、関数はもう同じ順序ではありません。クライアントコードで遅延バインドを使用する場合は、同じDISPIDを使用しません。

これを避ける最も良い方法は、.NETプロジェクトの古いタイプライブラリへの参照を追加して、コード内に古いインターフェイスを使用できるようにすることです。正しいCLSIDを持つように、インターフェイスを実装するクラスの[Guid]を取得する必要があります。

古いタイプのライブラリと新しいタイプのライブラリを比較するには、OleView.exeツールのView + Type Libraryを使用できます。生成されたIDLをコピーして貼り付け、それをdiffします。 Regasm.exe/tlbから新しいタイプライブラリを取得します。どんな不一致も問題になる可能性があります。

関連する問題