我们有一个讨厌的(或者可能是微不足道的?)问题。
有一个 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 控件不可用。
除此之外,这篇文章也应该是这样的:Is it possible to package WPF window as COM Object
你知道可能是什么问题吗?提前非常感谢!