0

COM で表示する必要があるクラスを含む独自のアセンブリがあるので、それを他の (.NET 以外の) アプリケーションで使用できます。

次のようなクラスを想像してください。

public class CProprietary
{
    public CProprietary2 oSubItem;
}

public class CProprietary2
{
}

これらのクラスは独自のものであり、COM からは見えません。私はそれらのソースコードを持っていません。現在の解決策として、継承された COM 可視クラスを提供する独自のアセンブリを作成しています。

[ComVisible(true), ClassInterface(ClassInterfaceType.AutoDual)]
public class CComVisibleProprietary : CProprietary
{
}

これで、COM 経由で基本クラス (CProprietary) を使用できるようになりましたが、CComVisibleProprietary.oSubItem にアクセスすると、従属クラス (CProprietary2) のオブジェクトが非 COM 可視のまま返されます。

だから私の問題は、クラスとそのすべての子クラスを自動的にラップする方法が必要だということです。または、ComVisible 属性を子クラスに継承する簡単な方法はありますか? これらの独自クラスの一部のプロパティは、System.Windows.Forms.ListBox.ObjectCollection などの .NET のオブジェクトも返すため、同じ名前空間に属していません。

4

1 に答える 1

1

「オートメーション ビュー」からの正しい方法は、埋め込みオブジェクト (CProprietary2) ごとに独自のオブジェクトを作成することです。各埋め込みオブジェクトには、メイン オブジェクト (CProprietary) のプロパティを使用し、埋め込みオブジェクトへのインターフェイスを返すことによってアクセスできます。

しかし、これを自動的に達成する方法はありません。すべてのオブジェクトに対応するインターフェースを提供する必要があります。

VBScript の構文では、prop が CPropriatary 型の場合、この方法でサブ項目にアクセスできます。

prop.oSubItem.DoSomething
于 2017-09-27T12:05:42.703 に答える