2009-05-27 1 views
3

私は私がリソース埋め込み型を構築していfolder.Which私のリソースの下にあるすべてのDTDファイルを持っているこのStreamをSystem.IO.UnmanagedMemoryStreamとして取得するのはなぜですか?

 Assembly myAssembly = Assembly.GetExecutingAssembly(); 
     string[] names = myAssembly.GetManifestResourceNames(); 
     foreach (string file in names) 
     { 
      if (file.EndsWith(".dtd")) 
      { 
       // attach to stream to the resource in the manifest 
        dtdStream = myAssembly.GetManifestResourceStream(file); 
        MessageBox.Show(dtdStream.ToString()); 
      }     
     } 

のようなコードの一部を持っています。
コードをデバッグすると、System.IO.UnmanagedMemoryStreamを示すメッセージボックスが表示されます

しかし、私はManaged MemoryStreamが欲しいですか?
私のコードで何が間違っていますか?
ありがとう...

+0

なぜマネージメモリストリームが必要ですか? –

答えて

8

リソースは、アセンブリの一部(EXEまたはDLL)としてコンパイルされます。つまり、OSがプロセスを開始するときにアンマネージメモリにロードされます。このため、GetManifestResourceStreamによって返されるストリームはすべて、(管理対象外)UnmanagedMemoryStream)である必要があります。

これはどういう問題ですか? MemoryStreamUnmanagedMemoryStreamのインターフェースは基本的に同じで、異なる(隠された)機能しかないので、あなたには何の影響もありません。

+0

可能であれば、GetManifestResourceStreamによって返されたストリームを管理対象として取得できますか?はいの場合はどうですか? –

+0

@crazy_itgal:そうだけど、かわいいとは思いませんし、私が想像できる(そしてオーバーヘッドを作成するだけの)利点はありません。 (まさにそれが助けになると思いますか?)とにかく、基本的な方法は、Entired UnmanagedMemoryStreamを読み込み、すべてをMemoryStreamオブジェクトに書き込むことです。 – Noldorin

+0

リソースストリームからイメージを読み取る必要がある場合は、UnmanagedMemoryStreamを使用してBitmapImageを初期化する必要があります。このBitmapImageは、コンストラクタのパラメータとしてMemoryStreamのみを受け入れます。 – ziyuang

関連する問題