厄介な(または些細な問題?)問題があります。
WPF コントロールがあります。メインと自動テスト用の 2 つのインターフェイスがあります。次のように定義します。
[ComVisible(true)]
[Guid("xxx")]
public interface IXXXXXTest
{
[DispId(1)]
void Test1(int index);
}
[ComVisible(true)]
public interface IXXXXX
{
void Main1(index);
}
[ComVisible(true)]
[Guid("xxx")]
ClassInterface(ClassInterfaceType.None)]
public partial class XXXXX_WPF_CONTROL : UserControl,
IXXXXX,
IXXXXXTest
{
...
}
現在、VBS からアクセスしようとしています。試してください 1)
Set Ctrl = GetControl(...) <---- this is ok
Ctrl.Test1(0) <---- Object doesn't support this property or method: 'Ctrl.Test1'
Set Ctrl = GetControl(...) <---- this is ok
Ctrl.Main1(0) <---- this is ok
したがって、「メイン」インターフェースでは正常に機能しますが、テストインターフェースでは機能します。私の知る限り、IDispatchEx がない場合、VBS は IDispatch を介してのみ「メイン」インターフェイスに到達するため、これは問題ないようです (?)。そこで IXXXXX にプロパティを追加して、テスト インターフェイスを取得しました。
[ComVisible(true)]
public interface IXXXXX
{
void Main1(index);
IXXXXXTest Test { get;}
}
....
public IXXXXXTest Test
{
get { return this as IXXXXXTest; }
}
これで、「メイン」インターフェースを介してこの IXXXXTest インターフェースにアクセスできるようになりました。2)を試してください
VBS:
Set Ctrl = GetControl(...) <---- this is ok
Set CtrlTest = Ctrl.Test <----- this is ok
CtrlTest.Test1(0) <---- Object doesn't support this property or method: 'CtrlTest.Test1'
:(
私たちの他の .NET コントロールの場合、「Try1」はトリックなしで機能することに注意してください。
おそらくWPFが原因で何か違うのでしょうか?また、
ClassInterface(ClassInterfaceType.None)]
他のもの (AutoDispatch / AutoDual) に入るか、そのままにしておくと、WPF コントロールが使用できなくなります。
それに加えて、これはこの記事の本来あるべき姿でもあります: WPFウィンドウをCOMオブジェクトとしてパッケージ化することは可能ですか?
何が問題なのか分かりますか?よろしくお願いします!