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);

我得到的第一个错误是“无法从'字符串'转换为'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 中找到类似的代码

试用com interopp-invoke .net技术来使用遗留代码。

于 2010-05-06T19:13:02.840 回答
0

如果您找不到用于执行此操作的本机 .NET 方法,一个好的方法是将您的方法包含在托管 C++ 包装器中。

这将让您做的是创建 C++ 代码来执行您的工作,同时公开一个托管类来调用该方法。这可能会更复杂,因为它需要您学习托管 C++,但允许您执行任何必要的 C++ 工作,返回包含“答案”的 .NET 字符串。

于 2010-05-06T19:20:05.120 回答
0

UCOMIStream 已弃用,请改用 ComTypes.Istream。然后看System.Runtime.InteropServices.ComTypes.IStream 到 System.IO.Stream

于 2010-05-07T08:35:33.400 回答