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

ameng203 2009-04-03 07:23:03
问题:
只有.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,运行结果一样。

请问,为什么找不到这个函数?如何才能调用呢?
...全文
459 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ameng203 2009-04-09
  • 打赏
  • 举报
回复
是厂家提供的库文件的问题,现在问题已经解决,多谢大家!
fairchild811 2009-04-03
  • 打赏
  • 举报
回复
先用implib之类的看看.dll里有没有这个函数,有的话动态调用loaddll之类的就可以。
jixingzhong 2009-04-03
  • 打赏
  • 举报
回复
估计dll中导出的函数名编译后被修改过了,确认一下
野男孩 2009-04-03
  • 打赏
  • 举报
回复
用vc6自带的工具Depend看看这个动态库的导出函数到底叫什么名字。如果是SAAT_TCPInit没道理GetProcAddress会返回NULL。

64,676

社区成员

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

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