PInvoke и IStream - PullRequest
       30

PInvoke и IStream

0 голосов
/ 15 июня 2011

У меня есть экспортированная функция из dll, написанная на c ++ со следующей сигнатурой:

Foo( LPSTREAM *pStream, UINT &Size ) 

, которая возвращает поток памяти и, очевидно, его размер.У меня проблемы с созданием подписи для экспортируемой функции, а затем с попыткой прочитать поток в C #.В какой-то момент удалось использовать «небезопасный» байтовый указатель для получения информации, но это не соответствует нашим требованиям.

Будем весьма благодарны за любые мысли, примеры, примеры и т. Д.

1 Ответ

0 голосов
/ 15 июня 2011

Вы можете сделать это так:

[DLLImport(@"mydll.dll")]
public static extern void Foo(out ComTypes.IStream Stream, ref uint Size);

Назовите это так:

ComTypes.IStream Stream = null;
uint Size;
Foo(out Stream, ref Size);

Как обычно, убедитесь, что ваши соглашения о вызовах совпадают (в C # по умолчанию используется stdcall, в C ++ по умолчанию используется cdecl).


Кроме того, зачем возвращать Size отдельно от потока, поскольку IStream знает его размер и сообщит вам, если вы его попросите?

...