转换系统_以.net字符串为对象



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

  1. 用C#编写的COM对象有一个COM可见的包装类,它使用了两个具有ComVisible(false)属性的类
  2. COM对象是从经典的ASP页面调用来执行一些工作的

非COM可见类具有一些.NET类型的属性(主要是字符串类型)。问题是,当在类中的各种方法中访问这些属性时,属性返回System_ComObject作为它们的值,而不是它们的实际内容。我尝试过使用ToString(),显式地将它们强制转换为.NET类型,并在获取属性的类型后使用InvokeMember()。但是,当使用InvokeMember时,似乎没有任何东西能给出所期望的属性的实际内容值,该值为某些属性提供了实际内容。我得到的只是系统_ComObject。

所以我的问题是如何获得这些属性的实际值,而不是仅仅获得System_ComObject?

更新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");
  }
}

Builder类被实例化,SetProperties()从Wrapper类调用,该类是使用Server.CreateObject().System在经典ASP页面中创建的_ComObject在PrintNode()中打印。我不确定除了ToString()之外,我还应该使用什么方法来获取属性的内容。

谢谢,

你试过这个吗:System.Runtime.InteropServices.Marshal.PtrToStringBSTR()

最新更新