dll中导出的一个函数:
BOOL test(char *ch)
{
printf("%s\n",ch);
free(ch);
return true;
}
在exe中调用:
typedef BOOL (_stdcall *lptest)(char *szFileToStart);
HMODULE hModule=LoadLibrary(dllname);
char szAlgPath[256];
strcpy(szAlgPath,"c:\\calc.exe");
lptest  test;
test=(lptest)GetProcAddress(hModule,"test");
test(szAlgPath);
为什么总是报错呢?提示当函数调用时,esp的值没有正确的保存.

解决方案 »

  1.   

    szAlgPath这个数组不可free!
    free(ch);不应该放在test函数里面,否则你这个函数对参数ch就有了较高的要求,比如至少它应该是可free的!
      

  2.   

    刚才我找到原因了
    定义错误了
    typedef BOOL (_stdcall *lptest)(char *szFileToStart);
    变成
    typedef BOOL ( *lptest)(char *szFileToStart);
    这样就Ok了!
      

  3.   

    typedef BOOL (_stdcall *lptest)(char *szFileToStart);
     改为  typedef BOOL (*lptest)(char *szFileToStart);