vc调用delphi写的dll的问题

msdn_user 2003-12-12 06:07:40
已知dll里面有一个函数的原型是
procedure SetThread( Handle: THandle; NumTimes: Word)

现在我用extern "C" void __stdcall SetThread(unsigned long,unsigned short);做声明

但是去调用SetThread()的时候发生了link2001错误
error LNK2001: unresolved external symbol _SetThread@8

看来是vc++把我的函数声明中的参数大小当成8了
实际的参数大小应该是6

请问怎么解决这个问题?
...全文
29 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
msdn_user 2003-12-14
  • 打赏
  • 举报
回复
msdn_user 2003-12-13
  • 打赏
  • 举报
回复
如果我想隐式(即静态)的调用这个dll
可以吗?
是不是一定要动态调用?
steper 2003-12-13
  • 打赏
  • 举报
回复
typedef void _stdcall PROCSETTHREAD(unsigned long,unsigned short)

HINSTANCE hHandle = LoadLibrary("..//***.dll");
PROCSETTHREAD *pSetThread =
(PROCSETTHREAD *)GetProcAddress(hHandle, "SetThread");
(*pSetThread)(..., ...)
...
FreeLibrary(hHandle);

^_^ 参考 <VC 技术内幕5> Page.511
msdn_user 2003-12-13
  • 打赏
  • 举报
回复
楼上的,UINT long类型跟unsigned long用在这里是一样效果吧

我已经自己做了lib文件
是用vckbase上的方法用def文件生成的lib
已知dll里面的函数原形是procedure SetThread( Handle: THandle; NumTimes: Word)

然后我自己写的.h文件,其中这个函数被声明为extern "C" void __stdcall SetThread(unsigned long,unsigned short);

到我实际调用这个函数的时候,它把实参的总长度当成8了,本来应该是4+2=6才对啊
所以发生link错误,提示说找不到函数 _SetThread@8,因为lib里面函数符号中的参数大小是6

这种情况该怎么办?
jiadrun 2003-12-12
  • 打赏
  • 举报
回复
这种方法不行,需要LIB文件。
采用Loadlibrary与Getprocaddress吧。
liu_swallow 2003-12-12
  • 打赏
  • 举报
回复
extern "C" void __stdcall SetThread(UINT long,unsigned short);

15,473

社区成员

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

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