This is a subroutine to get inverse of a matrix, passing an array form visual basic, it was in fortran. if i do not understand you have a problem like this. i think it can help you.
#include <windows.h>
#include <math.h>
void __stdcall matinv( int n, double *a_, double *ai_);
BOOL WINAPI DllMain( HINSTANCE hinstDLL ,DWORD dwReason ,LPVOID lpReserved )
{
// Perform actions based on the reason for calling.
switch( dwReason )
{
case DLL_PROCESS_ATTACH:
// Initialize once for each new process.
// Return FALSE to fail DLL load.
break;
case DLL_THREAD_ATTACH:
// Do thread-specific initialization.
break;
case DLL_THREAD_DETACH:
// Do thread-specific cleanup.
break;
case DLL_PROCESS_DETACH:
// Perform any necessary cleanup.
break;
}
return TRUE;
}
void __stdcall matinv( int n, double *a_, double *ai_)
{
double *a=(double *)a_ /* [n*n] elements */;
double *ai=(double *)ai_ /* [n*n] elements */;
int i,j,k;
double t,ti;
#define aind(i1,i2) (((i2)-1)*n+(i1)-1)
#define aiind(i1,i2) (((i2)-1)*n+(i1)-1)
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
{
if (i == j) ai[aiind(i,j)]=1;
else
{
ai[aiind(i,j)]=0;
}
}
}
for (i=1;i<=n;i++)
{
for (j=i+1;j<=n;j++)
{
if (abs(a[aind(j,i)]) > abs(a[aind(i,i)]))
{
for (k=1;k<=n;k++)
{
t=a[aind(i,k)];
ti=ai[aiind(i,k)];
a[aind(i,k)]=a[aind(j,k)];
ai[aiind(i,k)]=ai[aiind(j,k)];
a[aind(j,k)]=t;
ai[aiind(j,k)]=ti;
}
}
}
t=a[aind(i,i)];
for (k=1;k<=n;k++)
{
a[aind(i,k)]=a[aind(i,k)]/t;
ai[aiind(i,k)]=ai[aiind(i,k)]/t;
}
for (j=1;j<=n;j++)
{
if (i != j)
{
t=a[aind(j,i)];
for (k=1;k<=n;k++)
{
a[aind(j,k)]=a[aind(j,k)]-(t*a[aind(i,k)]);
ai[aiind(j,k)]=ai[aiind(j,k)]-(t*ai[aiind(i,k)]);
}
}
}
}
}