引用函数报错

绝世酱油瓶 2013-05-22 10:52:51
--------------------Configuration: Lib100 - Win32 Debug--------------------
Linking...
Creating library Debug/Lib100.lib and object Debug/Lib100.exp
Lib100.obj : error LNK2001: unresolved external symbol "int __stdcall ReadUSB(void *,unsigned char *,unsigned long,unsigned long *,unsigned long)" (?ReadUSB@@YGHPAXPAEKPAKK@Z)
Lib100.obj : error LNK2001: unresolved external symbol "int __stdcall WriteUSB(void *,unsigned char *,unsigned long,unsigned long *,unsigned long)" (?WriteUSB@@YGHPAXPAEKPAKK@Z)
Debug/Lib100.dll : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.

Lib100.dll - 3 error(s), 0 warning(s)


找了好久的原因啊 、我是新手 不太懂
头文件中。库中也有这2个函数
SONIXLIBAPI
BOOL
WINAPI
WriteUSB(
HANDLE hDevice,
LPBYTE pBuffer,
DWORD dwBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
DWORD dwMilliseconds = INFINITE
);

SONIXLIBAPI
BOOL
WINAPI
ReadUSB(
HANDLE hDevice,
LPBYTE pBuffer,
DWORD dwBytesToRead,
LPDWORD lpNumberOfBytesRead,
DWORD dwMilliseconds = INFINITE
);

还有其它函数都不报错,就这2个函数。
...全文
139 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2013-05-22
  • 打赏
  • 举报
回复
BOOL被定义为int。 BOOL Boolean variable (should be TRUE or FALSE). This type is declared in WinDef.h as follows: typedef int BOOL;
哮浪 2013-05-22
  • 打赏
  • 举报
回复
你用dumpbin查看你动态链接库导出的函数,然后看看你应用程序里面引用的函数名是否一样! 用.def文件比较安全 1.*.def使函数名不改变; 2.定义时为_stdcall,调用时也必须用_stdcall.
引用 6 楼 Java_Devil 的回复:
引用 4 楼 x2lang 的回复:
用.def文件吧!
能说具体点吗
绝世酱油瓶 2013-05-22
  • 打赏
  • 举报
回复
引用 8 楼 VisualEleven 的回复:
[quote=引用 7 楼 Java_Devil 的回复:]
[quote=引用 5 楼 VisualEleven 的回复:]
你这个是链接错误,库正确包含了吗?
SONIXLIBAPI
BOOL
WINAPI
WriteUSB(
HANDLE hDevice,
LPBYTE pBuffer,
DWORD dwBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
DWORD dwMilliseconds = INFINITE
);

SONIXLIBAPI
BOOL
WINAPI
ReadUSB(
HANDLE hDevice,
LPBYTE pBuffer,
DWORD dwBytesToRead,
LPDWORD lpNumberOfBytesRead,
DWORD dwMilliseconds = INFINITE
);

我贴的这2个函数就是库里面的呢。[/quote]
你这个是写在.h文件的中函数申明,现在需要的是.lib文件,你需要在工程中配置链接.lib文件。你这个是link错误,不是compile错误,明白?[/quote]这个我清楚哦,dll、lib都有,lib也引入了。
不过这个错误提示的是“int __stdcall ReadUSB”
lib中的是“SONIXLIBAPI
BOOL
WINAPI
ReadUSB”
这里是bool型的。我也没自己再定义这个函数
“ bRet = ReadUSB(hUSBDevice,pByte , inputLength, &dwBytesRead,350);”
我只是这样调用而已
sh98_wgf 2013-05-22
  • 打赏
  • 举报
回复
如果你使用的是源码,你应该将他的CPP文件加入你的工程,这样VC才会去编译他,然后才能连接。如果使用的是DLL,就用二楼的方法。如果还没解决,估计就是人品问题了。
Eleven 2013-05-22
  • 打赏
  • 举报
回复
引用 7 楼 Java_Devil 的回复:
[quote=引用 5 楼 VisualEleven 的回复:] 你这个是链接错误,库正确包含了吗?
SONIXLIBAPI BOOL WINAPI WriteUSB( HANDLE hDevice, LPBYTE pBuffer, DWORD dwBytesToWrite, LPDWORD lpNumberOfBytesWritten, DWORD dwMilliseconds = INFINITE ); SONIXLIBAPI BOOL WINAPI ReadUSB( HANDLE hDevice, LPBYTE pBuffer, DWORD dwBytesToRead, LPDWORD lpNumberOfBytesRead, DWORD dwMilliseconds = INFINITE ); 我贴的这2个函数就是库里面的呢。[/quote] 你这个是写在.h文件的中函数申明,现在需要的是.lib文件,你需要在工程中配置链接.lib文件。你这个是link错误,不是compile错误,明白?
绝世酱油瓶 2013-05-22
  • 打赏
  • 举报
回复
引用 5 楼 VisualEleven 的回复:
你这个是链接错误,库正确包含了吗?
SONIXLIBAPI BOOL WINAPI WriteUSB( HANDLE hDevice, LPBYTE pBuffer, DWORD dwBytesToWrite, LPDWORD lpNumberOfBytesWritten, DWORD dwMilliseconds = INFINITE ); SONIXLIBAPI BOOL WINAPI ReadUSB( HANDLE hDevice, LPBYTE pBuffer, DWORD dwBytesToRead, LPDWORD lpNumberOfBytesRead, DWORD dwMilliseconds = INFINITE ); 我贴的这2个函数就是库里面的呢。
绝世酱油瓶 2013-05-22
  • 打赏
  • 举报
回复
引用 4 楼 x2lang 的回复:
用.def文件吧!
能说具体点吗
Eleven 2013-05-22
  • 打赏
  • 举报
回复
你这个是链接错误,库正确包含了吗?
哮浪 2013-05-22
  • 打赏
  • 举报
回复
用.def文件吧!
绝世酱油瓶 2013-05-22
  • 打赏
  • 举报
回复
引用 1 楼 g6785654 的回复:
没包含lib文件 #pragma comment(lib,"**.lib")
这方法早试过了,在网上搜了很多原因都试过,都解决不了就只有跑这里来问了
sh98_wgf 2013-05-22
  • 打赏
  • 举报
回复
楼上正解解解
Ginie 2013-05-22
  • 打赏
  • 举报
回复
没包含lib文件 #pragma comment(lib,"**.lib")
oyljerry 2013-05-22
  • 打赏
  • 举报
回复
你这个库文件版本是否对,是否跟你的编译器版本一致

15,471

社区成员

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

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