簡體   English   中英

使用C#訪問“ Mapi32.dll”

[英]Accessing “Mapi32.dll” with C#

我正在使用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(),某物,某物);

我得到的第一個錯誤是“無法從'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
);

真正的問題是我不了解該方法的輸入和輸出如何/如何處理。

我想使用遺留的本機代碼庫不是一個好主意,我將花費更多的時間在.net中查找類似的代碼

嘗試使用com interopp調用.net技術來使用舊版代碼。

如果找不到用於執行此操作的本機.NET方法,則好的方法是將您的方法包含在托管C ++包裝器中。

這將使您做的是創建C ++代碼來執行您的工作,同時公開托管類以調用該方法。 這可能會更復雜,因為它將要求您學習托管C ++,但允許您執行任何必要的C ++工作,並返回包含“答案”的.NET字符串。

不建議使用UCOMIStream,請改用ComTypes.Istream。 然后查看System.Runtime.InteropServices.ComTypes.IStream到System.IO.Stream

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM