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

请问怎么解决这个问题?
...全文
10 6 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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);
  • 打赏
  • 举报
回复
相关推荐
发帖
进程/线程/DLL
加入

1.5w+

社区成员

VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
申请成为版主
帖子事件
创建了帖子
2003-12-12 06:07
社区公告
暂无公告