怎样调用动态加载的dll中的stdcall函数?

arrowcy 2006-10-07 11:09:31
stdcall函数在链接之后会自动加上前后缀,例如函数void fun()这个就需要在GetProcAddress中使用_fun@0才能调用,不知道有没有什么办法可以直接使用fun这个名字来找到相应的函数指针,同时又使用stdcall(以便VB、Delphi等语言的程序也能调用)
顺便确认一下,在VB之类的语言中调用stdcall的函数fun,就直接使用fun就可以了,不用使用_fun@0吧?
...全文
483 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
arrowcy 2006-10-10
  • 打赏
  • 举报
回复
DentistryDoctor(不在无聊中无奈,就在沉默中变态) ( ) 信誉:194 Blog
在VC中声明函数指针原型时请指定调用约定为__stdcall
======================================================
指定了,还是不行,问题主要出在GetProcAddress,他不能找到函数名,原因就是函数名在链接时被修改了。如果只使用extern C的话,发现函数名不会被修改,如果加上了__stdcall的话,函数名就会被修改了,但是为了让其他语言也能调用该dll,是不是必须要加上__stdcall,如果已经使用了extern C也要加上他吗?如果一定要加上的话,那在其他语言中调用的时候不是就要使用修改后的函数名?
arrowcy 2006-10-09
  • 打赏
  • 举报
回复
ding
SolidusSnake 2006-10-09
  • 打赏
  • 举报
回复
写个def文件,例如xx.def,包含到项目里面,然后这么写

EXPORTS
fun

DentistryDoctor 2006-10-09
  • 打赏
  • 举报
回复
在VC中声明函数指针原型时请指定调用约定为__stdcall
luolovegui 2006-10-08
  • 打赏
  • 举报
回复
再提示给你的.
luolovegui 2006-10-08
  • 打赏
  • 举报
回复
自己在外写一个函数包装一下就行了. vb就是先得到参数信息的.
蒋晟 2006-10-08
  • 打赏
  • 举报
回复
use extern C
reference
http://msdn2.microsoft.com/en-us/library/d91k01sh.aspx
arrowcy 2006-10-08
  • 打赏
  • 举报
回复
我遇到的问题就是同时指定了extern C和stdcall
另,在jiangsheng提供的链接中有这么一段话:
If you place the decorated names produced by the Visual C++ compiler into a .def file, applications that link to your DLL must also be built using the same version of Visual C++ so that the decorated names in the calling application match the exported names in the DLL's .def file.
这段话是什么意思?好像是说如果在def中指定了名称就要使用同样版本的VC来编译才不会出错?这是否仅仅是针对静态链接来说的?
arrowcy 2006-10-08
  • 打赏
  • 举报
回复
我也用过extern C,是否用了extern C就不需要指定stdcall了呢?

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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