2010-06-15 89 views
1

我写过一个ATL/ActiveX对象,它通过COM接口公开各种属性和方法。我希望能够从Silverlight应用程序访问这些方法和属性。我遇到的问题是我可以从Silverlight/C#中访问这些方法,但是我没有找到访问其属性的正确语法。通过Silverlight/JavaScript访问ActiveX对象中的属性

换句话说,我的Silverlight C#代码看起来是这样的:

var ax = HtmlPage.Document.CreateElement("object"); 
ax.Id = "myControl"; 
ax.SetAttribute("style", "width: 1px; height: 1px;"); 
ax.SetAttribute("classid", "CLSID:42832F4C-3480-4450-A6B5-156B2EFC408F"); 
HtmlPage.Document.Body.AppendChild(ax); 

// This works 
ax.Invoke("SomeMethod", "param1", "param2"); 

// Each of these throw a "Failed to invoke" InvalidOperationException 
ax.Invoke("SomeProperty"); 
ax.Invoke("SomeProperty", "propertyValue"); 
ax.Invoke("get_SomeProperty"); 
ax.Invoke("put_SomeProperty", "propertyValue"); 

我当然可以,写身边的AX对象纯JavaScript包装,并从Silverlight中调用JavaScript函数,和我可能还是这样做的。但是,如果我不需要,我宁愿避免编写和维护单独的图层。

有什么建议吗?

回答

1

好的,解决方案很明显,我只是没有看够硬。正确的语法是:

ax.GetProperty("SomeProperty"); 
ax.SetProperty("SomeProperty", "propertyValue"); 

Duh。