C# 用C语言访问“Mapi32.dll”

C# 用C语言访问“Mapi32.dll”,c#,c++,dllimport,istream,C#,C++,Dllimport,Istream,我正在使用VS2008C Windows应用程序 我有这个DLL导入我正在尝试使用 [DllImport("Mapi32.dll", PreserveSig = true)] private static extern void WrapCompressedRTFStream( [MarshalAs(UnmanagedType.Interface)] UCOMIStream lpCompressedRTFStream, uint ulflags, [MarshalAs(UnmanagedType

我正在使用VS2008C 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

如何将字符串传递到WrapCompressedRTF流中?我不明白这个方法所期望的是什么

我试着在按钮上使用它

RichText1.text=WrapCompressedRTFStream\u CompressedRichText.ToString,某物,某物

我得到的第一个错误是无法从“字符串”转换为“System.Runtime.InteropServices.UcomError”

我希望理解这一点的人能给出一个有帮助的答案

好的,所以当我使用IStream时,我也会遇到同样的情况

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

这里真正的问题是我不明白如何处理这个方法的输入和输出。

我认为使用传统的本机代码库不是一个好主意&我会花更多的时间在.net中查找类似的代码


尝试com互操作或p-invoke.net技术以使用遗留代码<>这将让您创建C++代码来执行您的工作,同时公开托管类来调用该方法。这可能会更复杂,因为它需要你学习托管C++,但允许你做任何必要的C++工作,返回包含你答案的.NET字符串。然后看看

如果不知道压缩算法,就无法解压缩它是microsoft outlook CompressedRightText格式。@Midhat:这就是这个函数的要点。看看in和out参数,我在看in和out参数,这就是我遇到的问题。注意:如何将字符串传递到WrapCompressedRTF流中?我不明白这个方法期望的是什么。你找到解决方案了吗?我正在尝试做同样的事情…我尝试将其与com互操作一起使用,但未能使其正常工作。看看链接上的代码,你能帮我用interop吗?在这一点上我不想学习C++。至于.net中的类似代码。到目前为止,我还没有找到。也许这篇文章会有所帮助:那太好了,但是就像你说的,我必须学习C++,我还没有准备好在这上面花时间,我只需要知道如何在C窗口中的链接中使用代码。关于如何在IrrRAM对象中移动字符串和退出ISTRAM的任何指导不是一个现有的对象;这是一个界面。您必须在自己的类中实现它。