У меня есть управляемая программа, которая взаимодействует с неуправляемой библиотекой DLL.
Библиотека создает объект, который просит (с помощью функции обратного вызова, преобразованной в делегат) управляемый хост заполнить неуправляемый массив.Сам массив передается через указатель (IntPtr) вместе с информацией о его размере.Тип известен обеим сторонам.Дело в том, как можно безопасно заполнить неуправляемый массив данными в управляемом коде?Применяются два ограничения: небезопасный код и, предпочтительно, дополнительные массивы не создаются.Массив может быть передан другим способом, если таковой существует.
Пусть обратный вызов имеет следующий прототип:
typedef void (__stdcall * FillData)(double * array, int count);
Пусть делегат имеет следующий прототип:
protected delegate void FillData(IntPtr array, int count);