我在尝试获取类属性的值时遇到了一些麻烦。实现结构如下:
- 用 C# 编写的 COM 对象有一个 COM 可见包装类,该类使用两个具有 ComVisible(false) 属性的类。
- 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() 我应该使用什么其他方法来获取属性的内容。
谢谢,