我有一个提供大量 API 的 .net 程序集,我需要为它编写一个 COM 包装器。由于时间限制,我无法为 .net 程序集提供的每个方法和属性编写接口。相反,我打算做的是编写一个通用的 commandParser 函数,它接受字符串参数,给出被引用的属性或方法的完整路径(?),然后该方法必须调用正确的属性或方法。例如,假设我需要设置属性 Visible ,我将传递如下字符串(请参阅图像以获取类结构)或者如果需要调用方法
“APx.AcousticResponse.AcquiredWaveform.DeltaCursor.Visible”
或者
“APx.BandpassLevel.FixedTuningFrequency.GetValue(Unit)”**
显然我一无所知,我知道使用反射是可能的,但我还没有到那里。这是我迄今为止一直在工作的虚拟代码,但没有任何成功:P
public bool methodFromString(string methodName,object [] parameteres)
{
string [] split = methodName.Split(new char []{'.'});
apx = new APx500();
Type wrapType = apx .GetType();
FieldInfo[] fields = wrapType.GetFields();
MemberInfo[] members = wrapType.GetMembers();
Console.WriteLine(members.Length);
MethodInfo [] methods = wrapType.GetMethods();
foreach (MemberInfo mem in members)
{
//Console.WriteLine(mem.Name);
if(mem.Name == split[0])
{
Console.WriteLine(mem.Name);
Type memType = mem.GetType();
MethodInfo[] temp = memType.GetMethods();
foreach (MethodInfo t in temp)
{
Console.WriteLine(memType.Name);
}
}
//if (met.Name == methodName)
//{
// try
// {
// met.Invoke(APx, parameteres);
// break;
// }
// catch (TargetInvocationException ex)
// {
// Console.WriteLine(ex.Message);
// Console.WriteLine(ex.InnerException);
// break;
// }
//}
}
// MethodInfo theMethod = wrapType.GetMethod(methodName);
//theMethod.Invoke(APx, parameteres);
//wrapType.InvokeMember(methodName,
// BindingFlags.InvokeMethod | BindingFlags.Public |
// BindingFlags.Static,
// null,
// null,
// parameteres);
return true;
}
非常感谢任何提示或帮助