0

VS 2008 C# Windows アプリケーションを使用しています。

使用しようとしているこの DLL インポートがあります。

[DllImport("Mapi32.dll", PreserveSig = true)]
private static extern void
WrapCompressedRTFStream(
[MarshalAs(UnmanagedType.Interface)]
UCOMIStream lpCompressedRTFStream,
uint ulflags,
[MarshalAs(UnmanagedType.Interface)]
out UCOMIStream lpUncompressedRTFStream
);

public const uint MAPI_MODIFY = 0x00000001;
public const uint STORE_UNCOMPRESSED_RTF = 0x00008000;

CompressedRFTFormat の圧縮文字列があります。

文字列を WrapCompressedRTFStream に渡すにはどうすればよいですか? メソッドが何を期待しているのかわかりません。

ボタンで使用しようとしています。

RichText1.text = WrapCompressedRTFStream(_CompressedRichText.ToString(),something,somethingelse);

最初に表示されるエラーは、「'string' から 'System.Runtime.InteropServices.UCOMIStream に変換できません」です。

これを理解している人が役立つ回答を投稿してくれることを願っています!

わかりましたので、IStream を使用すると同じ状況になります。

[DllImport("Msmapi32.dll", PreserveSig = true)]
private static extern void WrapCompressedRTFStream(
[MarshalAs(UnmanagedType.Interface)]
    IStream lpCompressedRTFStream,
uint ulflags,
[MarshalAs(UnmanagedType.Interface)]
    out IStream lpUncompressedRTFStream
);

ここでの本当の問題は、このメソッドの入力と出力を何をどのように処理するかを理解していないことです。

4

3 に答える 3

0

これを行うためのネイティブ .NET メソッドが見つからない場合は、Managed C++ ラッパーにアプローチを含めることをお勧めします。

これにより、メソッドを呼び出すマネージド クラスを公開しながら、C++ コードを作成して作業を実行できます。Managed C++ を学習する必要があるため、これはより複雑になる可能性がありますが、「答え」を含む .NET 文字列を返し、必要な C++ 作業を行うことができます。

于 2010-05-06T19:20:05.120 に答える
0

従来のネイティブ コード ライブラリを使用するのは得策ではないと思います。.net で類似のコードを見つけるために、もう少し時間をかけて調査します。

com interopまたはp-invoke .netテクノロジを試して、レガシ コードを使用します。

于 2010-05-06T19:13:02.840 に答える
0

UCOMIStream は非推奨です。代わりに ComTypes.Istream を使用してください。次に、System.Runtime.InteropServices.ComTypes.IStream から System.IO.Stream を見てください。

于 2010-05-07T08:35:33.400 に答える