Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用System.Dynamic来内省COM对象_C#_Dynamic_Com Interop - Fatal编程技术网

C# 使用System.Dynamic来内省COM对象

C# 使用System.Dynamic来内省COM对象,c#,dynamic,com-interop,C#,Dynamic,Com Interop,如何使用IDynamicMetaObjectProvider内省COM对象?具体来说,给定一个任意COM对象,我想返回一个字典,其中键是属性名,值是COM对象中属性的字符串值(如果属性值不是字符串,则跳过它) 如何在运行时像这样获取属性名及其值?你真的不能;为了提供动态功能,实现IDynamicMetaObjectProvider不需要对象,它是一个钩子,允许它们在绑定过程中发挥作用 对于这种操作,您仍然需要使用反射来获取成员和值。System.\uu ComObject似乎是这样做的,由于VS

如何使用IDynamicMetaObjectProvider内省COM对象?具体来说,给定一个任意COM对象,我想返回一个字典,其中键是属性名,值是COM对象中属性的字符串值(如果属性值不是字符串,则跳过它)


如何在运行时像这样获取属性名及其值?

你真的不能;为了提供动态功能,实现IDynamicMetaObjectProvider不需要对象,它是一个钩子,允许它们在绑定过程中发挥作用


对于这种操作,您仍然需要使用反射来获取成员和值。

System.\uu ComObject似乎是这样做的,由于VS debugger视图能够将其作为动态对象进行评估,这可能会增加一些额外的帮助:@Paul Betts:您是说您可以将
系统强制转换为
IDynamicMetaObjectProvider
?如果是这样的话,那么为什么不直接执行强制转换代码呢?看起来做起来很简单?我想是的,但我要问的是,我如何使用IDynamicMetaObjectProvider遍历属性列表?就像你通常做的那样使用反射,dyn.GetType().GetProperties()等等@Hans这似乎不起作用,它只返回ComObject静态属性在我的机器上运行良好。确保引用的类型为动态,而不是对象。COM服务器实现IDispatch可能是我的问题,它是动态的,但我将它转换为对象。谢谢你的提示!