私は、VB6 で使用している C# 4.0 で COM 可視クラス ライブラリを作成しました。VB6オブジェクトブラウザを開いて公開されたメンバーを見ると、すべての公開メンバーのイベントが表示されます...しかし、C#コードではそれらのいずれも定義されていません。
これは正常ですか?私は何か間違ったことをしていますか?
[ClassInterface(ClassInterfaceType.None)]
[ComSourceInterfaces(typeof(IMyClass))]
public class MyClass : IMyClass
{
public void DoSomething(string someParam)
{
...
}
}
public interface IMyClass
{
void DoSomething(string someParam);
}
アセンブリは厳密な名前のキーで署名されてAssemblyInfo.cs
おり、[assembly: ComVisible(true)]
属性が設定されていますが、問題と関係があるかどうかはわかりません。
DoSomething(string)
VB6 でオブジェクト ブラウザーを見ると、 のメンバーとして表示されることを期待していましたがMyClass
、のメンバーのように、公開されているすべてのメソッドに一致するシグネチャを持つイベントも表示されています。Event DoSomething(someParam As String)
MyClass
さらに不可解なことに (少なくとも私には)、プロパティには「一致する」イベントもあります (ただし、小さな稲妻のアイコンからしかわかりません) -MyClass
次のようなプロパティが定義されている場合:
public string SomeProperty { get; set; }
VB6オブジェクトブラウザは、「イベント」が として定義されていると言うでしょうProperty SomeProperty As String
。これは私をびっくりさせます.「プロパティ」はどのように1)複製され、2)複製はオブジェクトブラウザに「イベント」アイコンで表示されますか?同じことが、読み取り専用の「プロパティ/イベント」対応する取得専用プロパティにも当てはまります。
これらのイベントはどこから来て、どうすれば取り除くことができますか?
UPDATE画像は千の言葉に値します:
更新間違ったことは、属性のComSourceInterfaces
代わりに誤って使用されていたComDefaultInterface
属性でした。前者を後者に交換すると、期待される結果が得られます。