<p>I am trying to use a third party DLL that wants an int** as one of the parameters to the method.  It describes the parameter as the address of the pointer that will point to the memory allocation.</p>

<p>Sorry for any confusion.  The parameter is two-way I think.  The DLL is for talking to an FPGA board and the method is setting up DMA transfer between the host PC and the PCI board.</p>

Use a by-ref
```
System.IntPtr
```
.
```
```
[DllImport("thirdparty.dll")]
 static extern long ThirdPartyFunction(ref IntPtr arg);

 long f(int[] array)
  { long retval = 0;
    int  size   = Marshal.SizeOf(typeof(int));
    var  ptr    = IntPtr.Zero;

    try 
     { ptr = Marshal.AllocHGlobal(size * array.Length);

       for (int i= 0; i < array.Length; ++i) 
        { IntPtr tmpPtr = new IntPtr(ptr.ToInt64() + (i * size));
          Marshal.StructureToPtr(array, tmpPtr, false);
        }

       retval = ThirdPartyFunction(ref ptr);
     }
    finally 
     { if (ptr != IntPtr.Zero) Marshal.FreeHGlobal(ptr);
     }

    return retval;
  }
```
```