Как я могу передать указатель из C # в неуправляемую DLL? - PullRequest
5 голосов
/ 30 марта 2011

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

Вот пример кода:

[DllImport(@"Bird.dll")]
private static extern bool foo(ushort *comport);

Соответствующая запись в заголовке:

BOOL DLLEXPORT foo(WORD *pwComport);

Когда я пытаюсь просто разыменовать его (&comport), я получаю сообщение об ошибке: « Указатели и буферы фиксированного размера могут использоваться только в небезопасном контексте. "

Как мнеобойти это?

1 Ответ

13 голосов
/ 30 марта 2011

Использование ref:

[DllImport(@"Bird.dll")]
private static extern bool foo(ref ushort comport);

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

ushort comport;
foo(ref comport);

Для такого взаимодействия я бы предпочел использовать UInt16 вместо ushort в качестве эквивалента WORD.

...