Как я могу передать указатель из С# в неуправляемую DLL?

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

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

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

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

BOOL DLLEXPORT foo(WORD *pwComport);

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

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


person Tom Wright    schedule 30.03.2011    source источник


Ответы (1)


Используйте 1_:

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

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

ushort comport;
foo(ref comport);

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

person David Heffernan    schedule 30.03.2011