convertir system._comobject a cadena .net

Tengo algunos problemas para obtener los valores de la propiedad de una clase. La estructura de implementación es la siguiente:

  1. Un objeto COM escrito en C# tiene una clase contenedora visible COM que utiliza dos clases con el atributo ComVisible (falso).
  2. El objeto COM se llama desde la página ASP clásica para realizar algún trabajo.

Las clases visibles que no son COM tienen algunas propiedades de los tipos .NET (principalmente tipos de cadena). El problema es que al acceder a estas propiedades en varios métodos en las clases, las propiedades devuelven System._ComObject como su valor en lugar de su contenido real. Intenté usar ToString(), convertirlos explícitamente en sus tipos .NET y también usar InvokeMember() después de obtener el tipo de propiedad. Pero nada parece dar el valor de contenido real de las propiedades cuando se usa InvokeMember, que proporciona el contenido real de algunas propiedades. Todo lo que obtengo es System._ComObject.

Entonces, mi pregunta es ¿cómo obtengo el valor real de estas propiedades en lugar de simplemente obtener System._ComObject?

ACTUALIZACIÓN 1:

Una muestra de código de lo que estoy haciendo:

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

Se crea una instancia de la clase Builder y se llama a SetProperties() desde la clase Wrapper que se crea en una página ASP clásica usando Server.CreateObject(). El System._ComObject se imprime en PrintNode(). No estoy seguro de qué otro método que no sea ToString() debo usar para obtener el contenido de las propiedades.

Gracias,

preguntado el 27 de julio de 12 a las 15:07

Agregue un código para ilustrar lo que está describiendo (no es fácil entender a partir de su descripción lo que está haciendo o dónde está viendo las instancias de System._ComObject). Las propiedades con valores de cadena de las clases .NET siempre devuelven instancias de cadena. Algo más debe estar pasando en su código. -

No hay ningún escenario en el que un literal de cadena "Tipo 1" se transforme en un System.__ComObject. Tu fragmento no tiene sentido. El alborotador debe ser resp.. -

1 Respuestas

¿Has probado esto? System.Runtime.InteropServices.Marshal.PtrToStringBSTR() ?

Respondido 27 Jul 12, 16:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.