以下是PB对应的代码。运行正常。
Dim PHDObject As Object
Dim Tag As Object
Dim iTagNumber As Integer
Dim i As Integer
Dim phdValue(,) As String
Try
PHDObject = CreateObject(PhdConst.PHDOBJECT)
PHDObject.Hostname = PhdConst.PHDHOSTNAME
PHDObject.SampleMethod = PhdConst.PHDSAMPLEMETHOD
PHDObject.tags.Add(tagName)
Tag = PHDObject.tags(tagName)
PHDObject.StartTime = startTime
PHDObject.EndTime = endTime
PHDObject.MinimumConfidence = confidence
PHDObject.fetch()
iTagNumber = Tag.RowCount
ReDim phdValue(iTagNumber - 1, 2)
………………………………后续代码省略
以下是我改写的C#代码:
System.Type oType = System.Type.GetTypeFromProgID(PhdConst.PHDOBJECT); 
object PHDObject = System.Activator.CreateInstance(oType); 
oType.InvokeMember( "HostName",System.Reflection.BindingFlags.SetProperty,null,PHDObject, new object[] {PhdConst.PHDHOSTNAME});
oType.InvokeMember( "SampleMethod",System.Reflection.BindingFlags.SetProperty,null,PHDObject,new object[] {PhdConst.PHDSAMPLEMETHOD});
Object PHDTags = oType.InvokeMember( "Tags", System.Reflection.BindingFlags.GetProperty, null, PHDObject, null );
Object TagAdd = PHDTags.GetType().InvokeMember( "Add", System.Reflection.BindingFlags.InvokeMethod, null,PHDTags,new Object[] {tagName});
以上代码运行正常,没有报错。
但当遇到Tag = PHDObject.tags(tagName)时却不知道如何改写。请达人指点
另PHDObject.tags.Add(tagName)中的tags是属性
Tag = PHDObject.tags(tagName)中的tags是collection.VB转码 CreateObjectBindingFlagsCreateInstanceActivator

解决方案 »

  1.   

    tags是collection  tags(tagName)用的是索引器吗?
    var tagsType = PHDTags.GetType();
    MethodInfo miGet = tagsType.GetMethod("get_Item", BindingFlags.Instance | BindingFlags.Public);
    Object Tag = miGet.Invoke(PHDTags, new object[]{tagName});
      

  2.   

    多谢网友dongxinxi的回答。您的代码我试过了。最后一名出错。提示MethodInfo不包含Invoke的定义
      

  3.   

    这回添加了空间引用。编译可以通过。但是在调试运行时,运行到最后一句时还是报错。
    [Exception: 未将对象引用设置到对象的实例。]