2012-07-27 67 views
1

我在尝试获取某个类的属性值时遇到了一些麻烦。实施结构如下:将system._comobject转换为.net字符串

  1. C#编写的一个COM对象具有COM可见包装类,使得与标记有ComVisible特性(假)属性使用两类。
  2. 从传统的ASP页面调用COM对象来执行一些工作。

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

生成器类实例化和setProperties方法()是从一个在传统的ASP创建的包装类称为页面使用Server.CreateObject()。 System._ComObject打印在PrintNode()中。我不确定除了ToString()之外还有什么其他方法可以用来获取属性的内容。

感谢,

+0

请添加一些代码来说明您所描述的内容(从描述中不难理解您正在做什么,或者您在哪里看到System._ComObject实例)。 .NET类的字符串值属性总是返回String实例。你的代码中还有其他一些东西正在发生。 – 2012-07-27 15:35:41

+1

不存在将字符串文字“类型1”变形为System .__ ComObject的情况。你的代码片段没有意义。麻烦制造者应该是* resp *。 – 2012-07-27 16:48:47

回答

0

你有没有尝试过这样的:System.Runtime.InteropServices.Marshal.PtrToStringBSTR()