私は一方ではC#.Net 4.0アプリケーションを、もう一方ではVB6アプリを持っています。プロジェクトCOMを表示し、アクティブ化されたレジスタCOM相互運用機能を作成して、COMインターフェイスを作成しました。
新しいtlbファイルをインポートするC#アプリケーションを実装して、COMインターフェイスをテストしました。すべてが順調のようです。
次のステップとして、vb6でdllを使用しようとしました。dllをロードできましたが、すべてのパブリッククラスを表示できなくなりました。C#では、vb6で4つのクラスが表示されますが、表示できるのは3つだけです。
私が見ることができないクラスは「特別な」クラスです。これは、インターフェイスを構成し、イベントを提供するためです。
クラスはでマークされています
[ComSourceInterfaces(typeof(COMEvents))]
COMEventsインターフェースは次のようなものです
[Guid("11947063-4665-4DE1-931D-9915CCD01794")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface COMEvents
{
void MethodOne();
void MethodTwo();
}
私はすべてがうまくいったと言わなければなりません。COMインターフェイスプロジェクトによって実行時にロードされる他のアセンブリにのみ影響するプロジェクトを追加しました。それらは変更されたインターフェースを実装します。これは、comインターフェイスに加えた唯一の変更は、メソッドに追加のパラメーターを追加することです。
クラスが表示されなくなったのはなぜですか?そして、なぜそれは私が変更したクラスだけで、「危険な」方法ではないのですか?
助けが必要ですありがとう!
PS:今まで試しました:->すべてのプロジェクトはビルドx86です->プロジェクトビルドはx86マシン上にあります->ディペンデンシーウォーカー(GPSVC.DLLとIESHIMS.DLLはありませんが、以前にもありました。効果により、tlbがビルドされ、ロードされる可能性があります)-> tlbexp.exeを試行しましたが、依存関係エラーが発生しました。assamblyランタイムが現在のものよりも新しいためです。wtf?)