如何实现C Builder调用DLL
创始人
2024-06-21 22:01:06
0

尝试着进行 C++Builder生成的 DLL 之前,回顾一下如何调用一个 C++Builder 创建的 DLL 可能会有给您的操作带来很大帮助,你可以在运行时载入 DLL,而不是使用引入库。

调用 DLL 函数,首先通过选择菜单 Project | Add to Project 的方法,把引入库添加到你的 C++Builder 工程里;其次,在需要调用 DLL 函数的 C++ 源文件里为 DLL 头文件插入 #include 声明;***添加调用 DLL 函数的代码。程序清单 A 和 B 包含了做为测试 DLL 的源代码。注意,测试代码实现了两种不同的调用习惯(__stdcall 和 __cdecl)。

这样帮是有充分的理由的。当你设法调用一个用 Visual C++ 编译的 DLL 时,大多让你头疼的事情都是由于处理不同的调用习惯产生的。还要注意一点,有一个函数,它没有明确列出使用的调用习惯。这个未知函数作为不列出调用习惯的 DLL 函数的标识。

  1. #ifdef __cplusplus  
  2.   extern "C" {  
  3.   #endif  
  4.   #ifdef _BUILD_DLL_  
  5.   #define FUNCTION __declspec(dllexport)  
  6.   #else  
  7.   #define FUNCTION __declspec(dllimport)  
  8.   #endif  
  9.   FUNCTION int __stdcall StdCallFunction(int Value);  
  10.   FUNCTION int __cdecl CdeclFunction (int Value);  
  11.   FUNCTION int UnknownFunction(int Value);  
  12.   #ifdef __cplusplus  
  13.   }  
  14.   #endif  
  15.   //------------------------------------------  
  16.   //Listing B: DLL.C  
  17.   #define _BUILD_DLL_  
  18.   #include "dll.h"  
  19.   FUNCTION int __stdcall StdCallFunction(int Value)  
  20.   {  
  21.    return Value + 1;  
  22.   }  
  23.   FUNCTION int __cdecl CdeclFunction(int Value)  
  24.   {  
  25.    return Value + 2;  
  26.   }  
  27.   FUNCTION int UnknownFunction(int Value)  
  28.   {  
  29.    return Value;  
  30.   } 

从清单 A 和 B 创建测试 DLL,打开 C++Builder,选择菜单 File | New 调出 Object Repository。选择 DLL 图标,单击 OK 按钮。C++Builder 会创建一个新的工程,带有一个源文件。这个文件包含一个 DLL 的入口函数和一些 include 声明。现在选择 File | New Unit。

保存新的单元为 DLL.CPP。从清单 A 拷贝粘贴文本插入头文件 DLL.H。从清单 B 拷保存工程为 BCBDLL.BPR。接下来,编译工程,看看生成的文件。C++Builder 生成了一个 DLL 和以 .LIB 为扩展名的引入库。

这时,你有了在 C++Builder 里调用 DLL 所需的三个元素:DLL 本身,带有函数原型的头文件,用来连接的引入库。现在我们需要一个用来调用 DLL 函数的 C++Builder 工程。在 C++Builder 里创建一个新的工程,保存到你的硬盘上。#t#

从 DLL 工程目录里拷贝 DLL、引入库、DLL.H 头文件到新的目录。其次,在主单元里添加 #include 声明,包含 DLL.H。***,添加调用 DLL 函数的代码。清单 C 列出了调用由清单 A 和 B 生成的 DLL 中每个函数的代码。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...