通过反射搜索 COM 对象成员

Search for COM object members via Reflection

我正在使用 COM 对象,我需要能够在运行时通过反射搜索属性和方法,并根据与 COM 对象结构大致匹配的输入字符串调用它们。

我目前正在使用递归算法在运行时使用 obj.GetType().InvokeMember() 遍历 COM 对象的属性,但这只有在我提供 exact 属性 和方法名称,但情况并非总是如此。示例:

"ALPha.BETa.GAMma?" -> var gamma = comObj.ALPha.BETa.GAMma;
"ALP.BET.GAM?" -> var gamma = comObj.ALPha.BETa.GAMma;
"ALP.BET.GAM 200" -> comObj.ALPha.BETa.GAMma = 200;
"ALPha.DELta" -> comObj.ALPha.DELta();

(如果有人熟悉 SCPI,这就是我实际使用的内容——尝试在运行时将 SCPI 字符串动态转换为对 COM 对象 API 的调用)


杂散观察:

为了扩展@HansPassant 的评论,COM 只是不进行反射。后期绑定 COM(通过 IDispatch)是通过精确的字符串匹配完成的。最好的办法可能是自己解码类型库(我会从 this tool 开始)并构建从字符串到方法和属性的手动映射。 (是的,您正在手动重新实现反射。)