膨大な数の 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;
}
ヒントやヘルプをいただければ幸いです