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");
这里提示没有左值;
请问是不是这样用啊?


...全文
137 8 打赏 收藏 转发到动态 举报
写回复
用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");
一款用于共享软件加密的动态链接库文件,包含了获取硬盘物理序列号及BlowFish、MD5、SHA512、RIPEMD160、Secret16、MD5FileCheck、CRCFileCheck等多种强大加密算法,可以非常方便的用于软件的各类加密需求。支持VC/VB/BCB/Delphi等各类Windows平台下的开发工具,软件同时提供详细的函数定义说明、示例及各类开发工具使用的源代码。 软件功能: (1)可用于获取硬盘序列号(IDE/SCSI),支持Win9x/Me/NT/2000/XP。 (2)内置BlowFish、MD5、SHA512、RIPEMD160、Secret16、MD5FileCheck、 CRCFileCheck等多种强大加密算法来对软件进行加密保护。 (3)支持Window平台下的各类开发工具,如VC/VB/BCB/Delphi/PB/VFP等。 (4)可以非常方便的同时使用多种加密算法来对软件进行加密保护。 打包文件说明: Reg.dll-------------------加密算法动态链接库文件。 Reg.h---------------------在 VC(C/C++) 和 BCB 开发环境下的头文件。 Reg.lib-------------------在 VC(MFC) 开发环境下的 Library 文件。 Reg.bas-------------------在 VB 开发环境下的 Module 文件。 Readme.txt----------------纯文本格式说明文件。 Help.chm------------------函数接口详细定义说明文件。 MFC_TestEncryDll.zip------MFC调用Reg.dll进行加密示例。 VB6_TestEncryDll.zip------VB6调用Reg.dll进行加密示例。 CB5_TestEncryDll.zip------BCB5调用Reg.dll进行加密示例。 Delphi_TestEncryDll.zip---Delphi调用Reg.dll进行加密示例。 函数详细说明请参见Help.chm中具体函数说明部分及相关示例代码。

13,822

社区成员

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

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