GetProcAddress后无法调用函数

MSOKD 2011-05-29 11:28:15
#include <stdio.h>
#include <windows.h>

typedef int (CALLBACK * LPFNDLLFUNC1)(int,int);

LPFNDLLFUNC1 cal;
int re;

int main(){

HMODULE hmod=LoadLibrary(TEXT("dll1.dll"));
printf("%d\n",GetLastError());

cal = (LPFNDLLFUNC1)GetProcAddress(hmod,"add");

printf("%d\n",GetLastError());
printf("%d\n",cal);
printf("%d",GetProcAddress(hmod,"add"));

re=cal(1,2);// add函数 2个GetLastError());都返回0 都能正解得到地址,但是


system("pause");
exit(0);
}



add函数 为
int add (int a,int b){
return a+b
}

其中 2个GetLastError());都返回0 都能正确得到地址,但是就是不能用cal来调用.
...全文
142 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
laoyang103 2011-05-30
  • 打赏
  • 举报
回复
函数指针(参数、、、) 这样调用也可以 这取决于编译器
大熊猫侯佩 2011-05-30
  • 打赏
  • 举报
回复
你后面的add是C函数,你不能用CALLBACK修饰,而GetProcAddres是Win32

型的函数,即STDCALL,所以调用无问题。
老邓 2011-05-30
  • 打赏
  • 举报
回复
补充:先要压参数
老邓 2011-05-30
  • 打赏
  • 举报
回复
一种方法是先解引用,如1楼所示。
另一方法是用汇编:
__asm call cal;
roctang2006 2011-05-30
  • 打赏
  • 举报
回复
cal是指向函数的指针,是不是应该这样调用?

re = (*cal) (1,2);

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧