Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将system.\u comobject转换为.net字符串_.net_Com_Com Interop - Fatal编程技术网

将system.\u comobject转换为.net字符串

将system.\u comobject转换为.net字符串,.net,com,com-interop,.net,Com,Com Interop,我在获取类属性的值时遇到了一些问题。实施结构如下: 用C#编写的COM对象有一个COM可见包装器类,该类使用两个具有ComVisible(false)属性的类 从经典ASP页面调用COM对象以执行某些工作 非COM可见类具有.NET类型的某些属性(主要是字符串类型)。问题是,当在类中的各种方法中访问这些属性时,属性返回System.\u ComObject作为它们的值,而不是它们的实际内容。我尝试过使用ToString(),显式地将它们转换为它们的.NET类型,并在获取属性类型后使用Invoke

我在获取类属性的值时遇到了一些问题。实施结构如下:

  • 用C#编写的COM对象有一个COM可见包装器类,该类使用两个具有ComVisible(false)属性的类
  • 从经典ASP页面调用COM对象以执行某些工作
  • 非COM可见类具有.NET类型的某些属性(主要是字符串类型)。问题是,当在类中的各种方法中访问这些属性时,属性返回System.\u ComObject作为它们的值,而不是它们的实际内容。我尝试过使用ToString(),显式地将它们转换为它们的.NET类型,并在获取属性类型后使用InvokeMember()。但是当使用InvokeMember时,似乎没有给出属性的实际内容值,这会给出某些属性的实际内容。我得到的只是系统

    所以我的问题是如何得到这些属性的实际值,而不是仅仅得到系统

    更新1:

    我正在做的一个代码示例:

    [ComVisible(false)]
    public class Node
    {
       public int Id
       {
           get;
           set;
       }
       public string Name
       {
           get;
           set;
       }
       public string DataType
       {
          get;
          set;
       }
      }
    
    [ComVisible(false)]
    public class Builder
    {
       public Node Root;
       ASPTypeLibrary.Response response;
       public void SetUpProperties(object resp, string name, string dataType){
            response =   (ASPTypeLibrary.Response)resp;
           Root = new Node();
           Root.Name = name;
           Root.DataType = dataType;
           response.Write(Root.Name.ToString());   // This works fine
           response.Write(Root.DataType.ToString()); // This works fine
           PrintNode();
       }    
    
       public void PrintNode()
       {
         response.Write(Root.Name.ToString()); // This works fine. Prints actual content.
         response.Write(Root.DataType.ToString()); // This prints System._ComObject
       }
    }
    
    [ComVisible(true)]
    public class Wrapper
    {
      /* Required constructors are definded */
    
      public void Start(object resp)
      {
        Builder bld = new Builder();
        bld.SetUpProperties(resp, "Node 1", "Type 1");
      }
    }
    
    生成器类被实例化,SetProperties()从包装器类调用,包装器类使用Server.CreateObject()在经典ASP页面中创建。系统.\u ComObject在PrintNode()中打印。我不确定除了ToString()之外还应该使用什么方法来获取属性的内容


    谢谢,

    您是否尝试过:
    System.Runtime.InteropServices.Marshal.PtrToStringBSTR()

    请添加一些代码来说明您所描述的内容(从您的描述中不容易理解您正在做什么,或者您在哪里看到系统。\u ComObject实例)。.NET类的字符串值属性始终返回字符串实例。您的代码中肯定有其他内容。不存在字符串文字“类型1”变形为系统的情况。你的片段没有意义。制造麻烦的人应该负责。