私はVB6で消費しているC#4.0でCOM可視のクラスライブラリを作成しました。私がVB6 オブジェクトブラウザを開いて、公開されたメンバーを見ると、私は個々の公開されたメンバーごとにイベントを見ています... しかし、C#コードはそれらを定義していません。VB6/COM Interop:これらのイベントはどこから来ますか?
これは正常ですか?私は何か間違っているのですか?
[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)]
属性が設定されているが、私はそれが問題とは何かを持っているかわかりません。
私はVB6でオブジェクトブラウザを見てみると、私は、MyClass
のメンバーとしてDoSomething(string)
を見て期待しと私はを行うことになる、しかし、私はすべての暴露のために、一致するシグネチャを持つイベントを見てもよメソッド、Event DoSomething(someParam As String)
のメンバーとしてMyClass
。
さらに(少なくとも私には)不可解な、特性はまた、「マッチング」イベントを(のみけれども少し稲妻のアイコンから伝えることができます)持っている - MyClass
はこのようなプロパティが定義されている場合:
public string SomeProperty { get; set; }
VB6オブジェクトブラウザでは、 "イベント"はProperty SomeProperty As String
と定義されていますが、これは私には気まずい思いです。 "プロパティ" 1)が重複し、2)オブジェクトブラウザに "イベント"アイコンが表示されます。読み込み専用のプロパティ/イベントを持つ取得専用のプロパティにも同じことが当てはまります。
これらのイベントはどこから発生し、どのように取り除かれますか?
UPDATE画像は千の言葉の価値がある:
UPDATE間違ったことは誤っComDefaultInterface
属性の代わりに使用されていたComSourceInterfaces
属性でした。期待される結果は、後者の元を与えるスワッピング:ComSourceInterfaceへの引数としてtypeof(IMyClass)
を渡すことで
これは本質的にはタイプミスであることを考えると、私はこれをローカライズし過ぎたものとして閉じようとしています。私はそれを削除することをお勧めします。 – Deanna
@Deanna実際にはタイプミスですが、私はCOMにイベントを公開することについて何かを学びました。私はあなたが正しいと思っています.COMのイベントをCOMに公開することについてのたくさんのSOの投稿がなければなりません...削除される価値はありません:) –
@Deanna私はこれを削除すべきだとは思わない。タイプミスですが、COM interopの初心者である他の人を混乱させる可能性があります。私もそれから何かを学びました。 – MarkJ