Доступ к "Mapi32.dll" с помощью C # - PullRequest
0 голосов
/ 06 мая 2010

Я использую 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 (), что-то, что-то еще);

Первая ошибка, которую я получаю: «Не удалось преобразовать строку» в «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
);

Реальная проблема здесь в том, что я не понимаю, что / как нужно делать с вводом и выводом этого метода.

Ответы [ 3 ]

0 голосов
/ 06 мая 2010

Если вы не можете найти собственный метод .NET для этого, хорошим подходом было бы включить ваш подход в оболочку Managed C ++.

Это позволит вам создать код C ++ для выполнения вашей работы, одновременно предоставляя управляемый класс для вызова метода. Это может быть более сложным, поскольку потребует изучения Managed C ++, но позволяет выполнять любую необходимую работу C ++, возвращая строку .NET, содержащую ваш «ответ».

0 голосов
/ 07 мая 2010

UCOMIStream устарел, используйте вместо него ComTypes.Istream.Затем посмотрите на System.Runtime.InteropServices.ComTypes.IStream to System.IO.Stream

0 голосов
/ 06 мая 2010

Полагаю, использование устаревших библиотек с нативным кодом не очень хорошая идея, и я бы потратил немного времени на поиск аналогичного кода в .net

Попробуйте com interop или p-invoke .net технологии для использования устаревшего кода.

...