none
用C#改写CreateObject问题。请帮忙。 RRS feed

  • 问题

  • 以下是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.  
    2013年7月30日 5:50

全部回复

  • hello,

    这应该不需要使用反射来建立实例,试着使用 new 来建立实例

    PhdConst.PHDOBJECT phd=new PhdConst.PHDOBJECT();

    至于tags就要靠你自己找一下属性,或是将该dll发给大家看看


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/

    2013年7月30日 6:44
  • public const string PHDOBJECT = "VisualPHD.Data"; public const string PHDHOSTNAME = "10.114.59.6"; public const string PHDSAMPLEMETHOD = "Raw";
    2013年7月30日 7:24
  • int count = Convert.ToInt32(PHDTags.GetType().GetProperty("Count").GetValue(PHDTags, null));
                for (int i = 0; i < count; i++)
                {
                    object listItem = PHDTags.GetType().GetProperty("Item").GetValue(PHDTags, new object[] { i });
                }

    http://feiyun0112.cnblogs.com/

    2013年8月30日 4:17
    版主