我编写了一个ATL / ActiveX对象,它通过COM接口公开了各种属性和方法。我希望能够从Silverlight应用程序访问这些方法和属性。我遇到的问题是我可以从Silverlight / C#访问方法,但我还没有找到正确的语法来访问它的属性。
换句话说,我的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函数,我可能会这样做。但是,如果我不需要,我宁愿避免编写和维护该单独的层。
有什么建议吗?
答案 0 :(得分:1)
好的,解决方案很明显,我只是看起来不够努力。正确的语法是:
ax.GetProperty("SomeProperty");
ax.SetProperty("SomeProperty", "propertyValue");
咄。