我正在使用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
);
这里的真正问题是我不明白该方法的输入和输出是什么/如何处理。
答案 0 :(得分:0)
我认为使用传统的本机代码库并不是一个好主意。我会再花一些时间在.net
中找到类似的代码尝试使用 com interop 或 p-invoke .net 技术来使用旧代码。
答案 1 :(得分:0)
如果找不到本机.NET方法,那么一个好的方法就是在Managed C ++包装器中包含你的方法。
这将允许您创建C ++代码来执行您的工作,同时公开托管类来调用该方法。这可能会更复杂,因为它需要您学习托管C ++,但允许您进行必要的C ++工作,返回包含“答案”的.NET字符串。
答案 2 :(得分:0)
不推荐使用UCOMIStream,而是使用ComTypes.Istream。然后查看System.Runtime.InteropServices.ComTypes.IStream to System.IO.Stream