1

クラスのプロパティの値を取得しようとすると、問題が発生します。実装構造は次のとおりです。

  1. C# で記述された COM オブジェクトには、ComVisible(false) 属性を持つ 2 つのクラスを使用する COM 可視ラッパー クラスがあります。
  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 クラスがインスタンス化され、Server.CreateObject() を使用して従来の ASP ページで作成された Wrapper クラスから SetProperties() が呼び出されます。System._ComObject は PrintNode() で出力されます。プロパティの内容を取得するために ToString() 以外のどのメソッドを使用すればよいかわかりません。

ありがとう、

4

1 に答える 1

0

これを試しましたか:System.Runtime.InteropServices.Marshal.PtrToStringBSTR()

于 2012-07-27T15:35:58.953 に答える