Visual C ++中的原型外部函数

时间:2012-08-21 13:00:14

标签: c winapi dll prototyping

我有一些exe应用程序。这个应用程序有一个导出表,并导出一堆函数。我想用其中的一些。例如,我需要使用ABS功能。我打开了Ida Pro,看了一下伪代码,我有下一个:

double __cdecl ABS(double *a1, double *a2)
{
 if ( *a2 < 0.0 )
 {
   *a1 = -1.0 * *a2;
 }
 else
 {
   *a1 = *a2;
   *(a1 + 4) = *(a2 + 4);
 }
 return *a1;
}

然后我写了原型:

typedef double (*ABS)(double *,double *);

int _tmain(int argc,_TCHAR* argv[])
{
    HINSTANCE hMod = LoadLibrary(L"exe.exe");
    if (hMod!=NULL)
    {
        ABS func = (ABS)GetProcAddress(HMod,"ABS");
        if (func!=NULL)
        {
            double x=0;
            double y =-2;
            double z = func(&x,&y);
        }
    }

    return 0;
}
在我的项目中

原型:

typedef double (*ABS)(double *, double *);

好的,hMod和func不是NULL,但结果我有一个错误(在读取内存时)或一些不正确的值。 (例如:483435,-343524) 请帮助我纠正这种情况

这里起源于Ida pro pseudosode:

double __cdecl ABS(int a1, int a2)
{
  if ( *(double *)a2 < 0.0 )
  {
    *(double *)a1 = -1.0 * *(double *)a2;
  }
  else
  {
    *(_DWORD *)a1 = *(_DWORD *)a2;
    *(_DWORD *)(a1 + 4) = *(_DWORD *)(a2 + 4);
  }
  return *(double *)a1;
}

我认为它等于我的优化

PS:*(a1 + 4) = *(a2 + 4);并不代表我们移动地址?我们移动指针值

0 个答案:

没有答案