Если ваш метод ожидает обратного вызова, принимающего указатель на любую структуру, вы можете передать управляемый обратный вызов при указании P / Invoke DllImports следующим образом:
private delegate void MyCallback(IntPtr par);
[DllImport("MyLibrary.dll")]
public static extern void SomeFunction(MyCallback callback);
Затем вы можете маршалировать IntPtr
в соответствующую структуру внутри вашего фактического метода обратного вызова.
[Изменить]
Чтобы передать параметр int
по ссылке, лучше всего подойдет следующая подпись делегата:
private delegate void MyCallback(ref int par);