1

我在尝试获取类属性的值时遇到了一些麻烦。实现结构如下:

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

非 COM 可见类具有 .NET 类型(主要是字符串类型)的一些属性。问题是,在类中的各种方法中访问这些属性时,属性返回 System._ComObject 作为它们的值,而不是它们的实际内容。我尝试使用 ToString(),将它们显式转换为它们的 .NET 类型,并在获取属性类型后使用 InvokeMember()。但是,当使用 InvokeMember 时,似乎没有给出属性的实际内容值,它给出了某些属性的实际内容。我得到的只是 System._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() 在经典 ASP 页面中创建的。System._ComObject 在 PrintNode() 中打印。我不确定除了 ToString() 我应该使用什么其他方法来获取属性的内容。

谢谢,

4

1 回答 1

0

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

于 2012-07-27T15:35:58.953 回答