![](/img/trans.png)
[英]Can I call MAPI32.DLL > MAPISendMail from a 64-bit C# Winforms application?
[英]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 interop或p調用.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.