我在获取类属性的值时遇到了一些问题。实现结构如下:
- 用C#编写的COM对象有一个COM可见的包装类,它使用了两个具有ComVisible(false)属性的类
- 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()
?