質問

私たちは、アセンブリをロードし、"レイト・バインディング "でメソッドを呼び出す既存のネイティブ・アプリケーション(おそらくVBで書かれている)を使用しています。 我々はソースコードにはアクセスできない。

このインターフェイスを C# で実装し、ネイティブ アプリケーションから C# アセンブリを呼び出すようにしたいと考えています。

これは可能なことでしょうか?

これを機能させるためには、メソッド名とメソッド シグネチャを一致させる以外に何かしなければならないことがありますか?

役に立ちましたか?

解決 2

これを機能させるために必要な手順は次のとおりです。

  1. クラスを [ComVisible(true)] とマークし、必ず一意の [Guid] 属性を指定してください。
  2. ProgId をクラス (通常は MyNamespace.MyClass) に一致させますが、クラスに属性を追加してこれをオーバーライドすることもできます。
  3. 呼び出される各メソッドに適切な [DispId] 属性を入力します。
  4. アセンブリをコンパイルし、アセンブリ上で regasm.exe を実行します。

そして出来上がり!ネイティブ コードは、「遅延バインディング」を介して C# を呼び出すことができます。もちろん、ネイティブ アプリケーションにアセンブリの読み込み方法を認識させるために、いくつかのレジストリ キーを設定する必要がありましたが、すべて機能しています。

他のヒント

VB6 から .NET コードを呼び出そうとしている場合、最もクリーンな方法は、C# コードを VB6 コードの COM オブジェクトとして表示させることです。そのため、C# コードを次のようにマークする必要があります。 ComVisible 既存の COM インターフェイスと同じであることを確認します。

アップデート: ここを始めるための記事です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top