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的值没有正确的保存.
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的值没有正确的保存.
free(ch);不应该放在test函数里面,否则你这个函数对参数ch就有了较高的要求,比如至少它应该是可free的!
定义错误了
typedef BOOL (_stdcall *lptest)(char *szFileToStart);
变成
typedef BOOL ( *lptest)(char *szFileToStart);
这样就Ok了!
改为 typedef BOOL (*lptest)(char *szFileToStart);