Hola,
No deberías tener problemas...
No se a que se deba el error del uses, pero mi primera sospecha se deba a que tienes un uses "vacio", es decir que no haces uso de ninguna unidad.
Si no vas a usar ninguna, borra la sección uses. Te debería quedar algo asi:
Código Delphi
[-]unit Main;
interface
uses
Listado de units;
type
TMyArray = array of [0..2,0..2] of integer;
TFmain = class(TForm);
private
public
procedure RecibeMatriz(var mat:TMyArray);
end;
var
FMain: TFMain;
implementation
{$R *.dfm}
procedure TFmain.RecibeMatriz(var mat:TMyArray);
begin
end;
end;
De la segunda manera (el tipo en implementation) no vas a poder "comunicarte" en forma externa cuando desees suministrar los parámetros debido a que el tipo no es dado a conocer a los demás.
Algo que no me queda claro en tus códigos es que si se trata de una Unit asociada a un Form, o es una unidad limpia (sin form asociado).
¿Podrías exponer el código completo? De esta manera podremos saber realmente que es lo que estás haciendo... en ocasiones esos "puntos suspensivos" pueden decirnos más de lo que crees.
Saludos,