我正在访问.net应用程序中的COM对象。 我想获得在设计时提供的这个COM对象的名称。
我用google搜索并了解获取名称的方法是通过GetTypeInfo api。但我不确定如何使用它。
任何人都可以提出解决方案吗?
答案 0 :(得分:1)
最后,我可以做到这一点。以下是我从COM对象获取在设计时指定控制名称的步骤:
'Name'属性不能直接在IDispatch接口上使用
了解扩展器属性
现在,下一个挑战是从可用的COM对象中获取扩展器对象。
检索扩展对象不是直接步骤。为实现这一目标,
首先,我们需要在控件上获取指向IOleObject接口的指针。这可以使用QueryInterface API检索。
使用IOleObject指针,我们必须掌握与控件关联的ClientSite。这可以使用IOleObject接口上提供的GetClientSite API来实现。这将返回一个指向IOleClientSite接口的指针。
从IOleClientSite接口指针,我们必须检索ControlSite。这是通过查询IOleControlSite接口来实现的。这将返回一个指向IOleControlSite接口的指针。
可以使用IOleControlSite接口使用可用的GetExtendedControl API检索Extender对象。
要访问扩展程序控制对象上的Name属性,我们必须获取指向IDispatch接口的指针并查询它。
答案 1 :(得分:0)
GetTypeInfo是IDispatch接口中的一个函数,因此您的COM对象必须支持IDispatch。 首先,您应该调用GetTypeInfoCount以查看组件是否提供类型信息。如果它返回0,那么它不会。
如果是,只需调用comObject.GetTypeInfo(0,0,指针)。第一个参数标识出你在问什么,0表示“关于组件”。 sescond参数是localeID,您可以从Kernel32.dll获取它,但使用0是US english的默认值。 thid是一个out参数,函数会将指针指向您正在寻找的ITypeInfo。
获得ITypeInfo之后,要获取名称,您仍然需要获取其文档(GetDocumentation),最后,文档具有名称(以及帮助文件和帮助上下文)。
所有这些都记录在MSDN中,搜索我在这里提到的功能以获取详细信息