我有一个ComClass,用于触发事件以从API获取价格。 prices = priceAPI.getPrices
返回具有多个属性的price对象,例如currentPrice,prevPrice等
运行此代码的示例如下
Dim WithEvents priceAPI As newToolforUsers.ComClass
' this event is fired on update
Private Sub priceAPI_pricesUpdated()
prices = priceAPI.getPrices
For Each iprice In prices
Debug.Print iprice.currentPrice
Debug.Print iprice.prevPrice
Debug.Print iprice.dailyHigh
Debug.Print iprice.dailyLow
Debug.Print iprice.dailyAvg
Next
End Sub
API会偶尔更新,但手动更新通常会落后几个月,所以我知道价格对象有更多新属性。
使用调试器,价格对象显示<No Variables>
,但它已正确返回对象并且所有属性都可用。
对象资源管理器似乎也没有透露价格对象的属性
有没有办法在VBA中找到COM对象的所有属性?
答案 0 :(得分:4)
给定COM对象,无法保证可以枚举其属性。您仍然可以尝试枚举属性访问类型信息,请参阅此问题中的详细信息: How does Visual Studio's debugger/interactive window dump the properties of COM Objects in .NET?
答案 1 :(得分:4)
调试器告诉你的是价格是后期IDispatch interface。很常见,特别是对于事件接口。这样的界面不会告诉您支持哪些属性和方法,您需要事先知道名称。然后IDispatch :: GetIDsOfNames()会将名称映射到一个数字,即属性或方法的DispId。然后在IDispatch :: Invoke()中使用它来调用方法或属性getter / setter。
这种映射从名称到数字是单向的。没有其他方式的支持。您应该从供应商或组件的作者提供的文档中预先知道名称。
您可以使用OleView.exe实用程序File + View Typelib命令查看可执行文件中嵌入的类型库。您可能在那里找到更好的价格声明。然而,这不太可能。