我正在使用COM对象,我需要能够在运行时通过Reflection搜索属性和方法,并根据与COM对象结构大致匹配的输入字符串调用它们。 / p>
我目前正在使用递归算法在运行时使用obj.GetType().InvokeMember()
遍历COM对象的属性,但这仅在我提供 exact 属性和方法名称,但并非总是如此。示例:
" ALPha.BETa.GAMma&#34?; - > var gamma = comObj.ALPha.BETa.GAMma;
" ALP.BET.GAM&#34?; - > var gamma = comObj.ALPha.BETa.GAMma;
" ALP.BET.GAM 200" - > comObj.ALPha.BETa.GAMma = 200;
" ALPha.DELta" - > comObj.ALPha.DELta();
(如果有人熟悉SCPI,这就是我实际使用的 - 尝试动态转换SCPI字符串,以便在运行时调用COM对象的API)
迷路观察:
typeof(IComObject).GetProperties()
只返回之前在运行时评估过的对我来说无用的属性。comObj
的类型显示为System.__ComObject
。GetProperties()
时看到的结果与之前相同。答案 0 :(得分:1)
要扩展@HansPassant评论,COM不会做反思。后期绑定COM(通过IDispatch)通过精确的字符串匹配完成。可能你最好的办法是自己解码类型库(我以this tool开头)并构建从字符串到方法和属性的手动映射。 (是的,您需要手动重新实现反射。)