I see here two strange points, though I am not sure that this is the reason on the failure:
1) array<IntPtr>^&#37;
% is not necessary in this case, since you don't change the reference in this function.
2) array<IntPtr> in mapped to the HANDLE array. Are you sure that IntPtr structure has the same size as HANDLE? Possibly it is, but this is dangerous. pin_ptr should be applied only to simple types like integer.

If performance is not critical, create int array (long for x64), copy every IntPtr to it in the managed code, and then call DIB_LoadArrayFromFilename with pinned int array.