Массив уже является ссылкой, поэтому он будет выделен как указатель на него. Это должно работать:
[DllImport("my.dll")]
static extern void methodA(UInt32[] data);
Если вам нужно передать данные обратно в управляемый код, вам нужно украсить параметр атрибутом Out :
[DllImport("my.dll")]
static extern void methodA([In, Out] UInt32[] data);
Использование:
uint[] data = new uint[] { 1, 2, 3, 4, 5 };
methodA(data);
Console.WriteLine(data[0]);
Другое решение заключается в объявлении параметра типа IntPtr:
[DllImport("my.dll")]
static extern void methodA(IntPtr data);
Чтобы это работало, вам нужно закрепить массив, чтобы получить для него IntPtr, или выделить память в неуправляемом пространстве и скопировать в нее содержимое массива. Я бы не рекомендовал эти варианты.
ref
требуется, если вы хотите передать одно значение типа значения по ссылке:
[DllImport("my.dll")]
static extern void methodB(ref UInt32 data);