BCB 动态调用VC dll,dll头文件函数的用法

by0717 2010-10-19 03:59:34
请大家帮忙看一下,我静态调用已经成功,dll 头文件的函数可以用。
但是动态调用的时候,loadLibrary(dll)已经成功,但是dll 头文件的函数怎么用?
下面是代码:
dll 头文件函数代码:

#ifdef LB_API2_EXPORTS
#define LB_API2 __declspec(dllexport) long __stdcall
#else
#define LB_API2 __declspec(dllimport) long __stdcall
#endif
......//省略

LB_API2 LB_AddressConflictExists(void);//函数定义
LB_API2 LB_BlinkLED_Addr(long addr);
LB_API2 LB_BlinkLED_Idx(long idx);
LB_API2 LB_BlinkLED_SN(char* SN);

我要在我写的程式里用上面的函数,怎么办?
GetProcAddress在这里怎么用?
我在my.cpp的my.h
// my.h
class TForm1 : public TForm
{
...
private: // User declarations
void (__stdcall *LB_AddressConflictExists)();
...
}
然后在my.cpp
LoadLibrary(dll);//成功
LB_AddressConflictExists = (void (__stdcall*)()) GetProcAddress(DLLInst, "LB_AddressConflictExists");
这里提示没有左值;
请问是不是这样用啊?


...全文
153 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
by0717 2010-10-20
  • 打赏
  • 举报
回复
ok 了
谢谢
结贴给分
by0717 2010-10-20
  • 打赏
  • 举报
回复
我在看看是不是写错东西了
by0717 2010-10-20
  • 打赏
  • 举报
回复
呵呵
还是不行
long (WINAPI *pLB_AddressConflictExists)(void);
提示错误为:
[C++ Error] Unit1.cpp(13): E2356 Type mismatch in redeclaration of '__stdcall LB_AddressConflictExists()'
zzbinfo 2010-10-20
  • 打赏
  • 举报
回复
没有看到你的这个#define LB_API2 __declspec(dllimport) long __stdcall
#endif定义,我以为 LB_API2这个是你的函数类型呢,你把我上面代码中的LB_API2改成long试试看
zzbinfo 2010-10-20
  • 打赏
  • 举报
回复
我的错误,不好意思没有看见你上面的文件定义,稍等我给改改
by0717 2010-10-20
  • 打赏
  • 举报
回复
Dear zzbinfo:
在用你的方法时候,先声明
LB_API2 (WINAPI *pLB_AddressConflictExists)(void);
提示错误为:
[C++ Error] Unit1.cpp(13): E2356 Type mismatch in redeclaration of '__stdcall LB_AddressConflictExists()'
然后 LB_API2头文件
LB_API2 LB_AddressConflictExists(void);//函数定义
提示错误为:
[C++ Error] LB_API2.h(254): E2344 Earlier declaration of '__stdcall LB_AddressConflictExists()'
然后
pLB_AddressConflictExists = (LB_API2 (WINAPI *)(void))GetProcAddress(hInsts,"LB_AddressConflictExists");
提示错误为:
[C++ Error] Unit1.cpp(25): E2188 Expression syntax
by0717 2010-10-19
  • 打赏
  • 举报
回复
谢谢楼上。
我想请教一下,这里的
1 LB_API2 LB_AddressConflictExists(void);//
中LB_API2是什么呢?函数类型吗?(初学,有点白)
2 pLB_AddressConflictExists = (LB_API2 (WINAPI *)(void))GetProcAddress(hInsts,"LB_AddressConflictExists
这句定义的LB_API2 (WINAPI *)(void))为Void,这void的函数,是怎么知道的,要是函数有两个返回值,怎判读LB_API2 (WINAPI *)的类型?
zzbinfo 2010-10-19
  • 打赏
  • 举报
回复
在my。cpp前面这样先定义函数后面再调用,之前要注意定义LB_API2
LB_API2   (WINAPI *pLB_AddressConflictExists)(void);
LB_API2 (WINAPI *pLB_BlinkLED_Addr)(long);
LB_API2 (WINAPI *pLB_BlinkLED_Idx)(long);
LB_API2 (WINAPI *pLB_BlinkLED_SN)(char* );


pLB_AddressConflictExists = (LB_API2 (WINAPI *)(void))GetProcAddress(hInsts,"LB_AddressConflictExists");
pLB_BlinkLED_Addr = (LB_API2 (WINAPI *)(long))GetProcAddress(hInsts,"LB_BlinkLED_Addr");
pLB_BlinkLED_Idx = (LB_API2 (WINAPI *)(long))GetProcAddress(hInsts,"LB_BlinkLED_Idx");
pLB_BlinkLED_SN = (LB_API2 (WINAPI *)(char*))GetProcAddress(hInsts,"LB_BlinkLED_SN");

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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