variant arrays of variant arrays

I can't set, directly, an element of a variant array of a variant array.

I can do this :

v:=varArrayof([varArrayOf([1,2]),varArrayOf([3,4]));

Which creates a pseudo 2 dimensional variant array.

But I can't then change one of the elements, without copying, as in this
example :

v[0][0]:=newVal;

or

v[0,0]:=newVal  {which is for proper 2D arrays anyway}

the compiler says that I can't assign to the left hand side.

I've tried getting round this problem with these possible soloutions :

variant(v[0])[0]:=newVal;

or

var pv : pvariant;
begin
    {stuff goes here }
    pv:=@v[0];
    pv^[0]:=newVal

or using absolute. I've also tried this :

   procedure setElement(const v : variant; element : integer;value :
variant);
   var
      pv : pvariant;
    begin
      pv:=@v;
      pv^[element]:=value;
    end;

I've tried a lot more than this and gotten no where.

Considering that the last of my examples appears to behave as though the
variant has been copied (or copy-on-write) I am wondering whether

a)there is a soloution
b)I have to get involved with safearray calls.

Anyone have any ideas?