Я совершенно неопытен в Interop в C # и сейчас борюсь с проблемой Pointer.У меня есть внешняя скомпилированная DLL и C # API (не могу там что-то изменить).Сам код взаимодействия выглядит (и должен быть изменен бот)
[DllImport("FWLIB32.dll", EntryPoint="cnc_rdcurrent")]
public static extern short cnc_rdcurrent( ushort FlibHndl, out short a );
Вторым аргументом (по документации) является адрес короткого массива, в который внешний вызов помещает данные.Фактический размер определяется во время выполнения.
В настоящее время я думаю о чем-то вроде (не проверено)
short* c = stackalloc short[N];
for (int i = 0; i < N; i++) c[i] = 0;
short cc = (short)c;
int NCReadCode = Focas1.cnc_rdcurrent(flibHndl, out cc);
Но для этого нужен небезопасный код.Поскольку остальная часть приложения полностью безопасна (другие члены API используют предопределенные структуры вместо явных адресов памяти)
Итак, есть ли способ сделать это без небезопасного кода?(Во-вторых, если вы обнаружите недостатки в моей идее, я также буду рад услышать;))
Спасибо всем!