2010-06-15 98 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。