只有.h文件和.dll文件,没有lib文件,如何调用dll文件中的函数?

ameng203 2009-04-03 07:23:05
问题:
只有.h文件和.dll文件,没有lib文件,如何调用dll文件中的函数?
现实情况:
现有文件:RFIDAPIEXPORT.h 和RFIDAPI.dll,其中的一个函数为例:

函数SAAT_TCPInit在头文件中的声明:
extern "C" bool RFID_API __stdcall SAAT_TCPInit(void** pHandle,char *pHostName,int nsocketPort);

尝试办法1:
在网上查了通过dumpbin生成lib文件的方法,但是,生成的def文件中,大多数函数为XCTCPInit形式,生成lib文件后,链接时出错:
Linking...
rfid.obj : error LNK2001: unresolved external symbol __imp__SAAT_TCPInit@12
Debug/RFID.exe : fatal error LNK1120: 1 unresolved externals

使用dumpbin导出dll的def文件中,这个函数对应的名字应该是:XCTCPInit

尝试办法2:
利用GetProcAddress函数指定动态连接库。
我的代码:
HINSTANCE hDllInst = LoadLibrary("RFIDAPI.dll");
if(hDllInst)
{

//typedef bool (*MYFUNC)(void** pHandle,char* pHostName,int nsocketPort);
typedef bool (*MYFUNC)(void** ,char* ,int );
MYFUNC TCPInit = NULL; // 函数别名
TCPInit = (MYFUNC)GetProcAddress(hDllInst, "SAAT_TCPInit");
if (TCPInit==NULL)
{
cout<<"error!"<<endl;
}
.....

运行输出: error 也就是说,GetProcAddress返回空,试了将SAAT_TCPInit改为XCTCPInit,运行结果一样。

请问,为什么找不到这个函数?如何才能调用呢?
...全文
292 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ameng203 2009-04-09
  • 打赏
  • 举报
回复
唉,折腾了半天,原来是厂家给的库文件有问题.....不过还是跟大家学了不少东西,多谢多谢。
fairchild811 2009-04-03
  • 打赏
  • 举报
回复
先用implib之类的看看.dll里有没有这个函数,有的话动态调用loaddll之类的就可以。
goodname 2009-04-03
  • 打赏
  • 举报
回复
请参考
http://topic.csdn.net/t/20030523/08/1822125.html
glacier3d 2009-04-03
  • 打赏
  • 举报
回复
先用depends工具看看dll里是否确实实现了那个函数
mengde007 2009-04-03
  • 打赏
  • 举报
回复
这个不好办……
lzr4304061988012 2009-04-03
  • 打赏
  • 举报
回复
hDllInst 这个是个非0脂吗?

GetLastError看看问题出在哪.

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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