如何实现C++Builder调用DLL
3个回答
展开全部
调用DLL 函数,首先通过选择菜单 Project | Add to Project 的方法,把引入库添加到你的 C++Builder 工程里;其次,在需要调用 DLL 函数的 C++ 源文件里为 DLL 头文件插入 #include 声明;最后添加调用 DLL 函数的代码。程序清单 A 和 B 包含了做为测试 DLL 的源代码。注意,测试代码实现了两种不同的调用习惯(__stdcall 和 __cdecl)。这样帮是有充分的理由的。当你设法调用一个用 Visual C++ 编译的 DLL 时,大多让你头疼的事情都是由于处理不同的调用习惯产生的。还要注意一点,有一个函数,它没有明确列出使用的调用习惯。这个未知函数作为不列出调用习惯的 DLL 函数的标识。#ifdef __cplusplus extern "C" { #endif #ifdef _BUILD_DLL_ #define FUNCTION __declspec(dllexport) #else #define FUNCTION __declspec(dllimport) #endif FUNCTION int __stdcall StdCallFunction(int Value); FUNCTION int __cdecl CdeclFunction (int Value); FUNCTION int UnknownFunction(int Value); #ifdef __cplusplus } #endif //------------------------------------------ //Listing B: DLL.C #define _BUILD_DLL_ #include "dll.h" FUNCTION int __stdcall StdCallFunction(int Value) { return Value + 1; } FUNCTION int __cdecl CdeclFunction(int Value) { return Value + 2; } FUNCTION int UnknownFunction(int Value) { return Value; } 从清单 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 里创建一个新的工程,保存到你的硬盘上。C++语言入门介绍C++中的C++函数说明如何学好C++呢?如何在Linux下进行C++开发选择C++编辑器的几大要素从DLL 工程目录里拷贝 DLL、引入库、DLL.H 头文件到新的目录。其次,在主单元里添加 #include 声明,包含 DLL.H。最后,添加调用 DLL 函数的代码。
2016-03-10 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
关注
展开全部
可以在运行时载入 DLL,而不是使用引入库。
调用 DLL 函数,首先通过选择菜单 Project | Add to Project 的方法,把引入库添加到 C++Builder 工程里;
其次,在需要调用 DLL 函数的 C++ 源文件里为 DLL 头文件插入 #include 声明;最后添加调用 DLL 函数的代码。
DLL是Dynamic Link Library的缩写,意为动态链接库。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。
调用 DLL 函数,首先通过选择菜单 Project | Add to Project 的方法,把引入库添加到 C++Builder 工程里;
其次,在需要调用 DLL 函数的 C++ 源文件里为 DLL 头文件插入 #include 声明;最后添加调用 DLL 函数的代码。
DLL是Dynamic Link Library的缩写,意为动态链接库。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、MFC加载动态库:
HINSTANCE hDll; // 动态库句柄
hDll = LoadLibrary("WiseSoft_LPR.dll"); // 加载动态库
typedef int (* lpFunction)(UINT);//声明函数指针类型
lpFunction Function; // 定义一个函数指针
Function=(lpFunction) GetProcAddress(hDll,"DllFunction");//得到所加载DLL模块中函数的地址,第二个参数是动态库中函数的名字
Function(m_iCameraID); // 调用函数
2、Linux下加载动态库
void *m_pDll; // 动态库文件指针
m_pDll = dlopen(strLibName.c_str(), RTLD_NOW); // 加载动态库文件
ttypedef int (* lpFunction)(); // 声明函数指针类型
lpFunction Function; // 定义一个函数指针
Function= (lpFunction)dlsym(m_pDll, "DllFunction");//得到所加载DLL模块中函数的地址,第二个参数是动态库中函数的名字
Function(); // 调用函数
以上给的两种调用动态库方式都是显示调用,隐式调用直接引用头文件即可
HINSTANCE hDll; // 动态库句柄
hDll = LoadLibrary("WiseSoft_LPR.dll"); // 加载动态库
typedef int (* lpFunction)(UINT);//声明函数指针类型
lpFunction Function; // 定义一个函数指针
Function=(lpFunction) GetProcAddress(hDll,"DllFunction");//得到所加载DLL模块中函数的地址,第二个参数是动态库中函数的名字
Function(m_iCameraID); // 调用函数
2、Linux下加载动态库
void *m_pDll; // 动态库文件指针
m_pDll = dlopen(strLibName.c_str(), RTLD_NOW); // 加载动态库文件
ttypedef int (* lpFunction)(); // 声明函数指针类型
lpFunction Function; // 定义一个函数指针
Function= (lpFunction)dlsym(m_pDll, "DllFunction");//得到所加载DLL模块中函数的地址,第二个参数是动态库中函数的名字
Function(); // 调用函数
以上给的两种调用动态库方式都是显示调用,隐式调用直接引用头文件即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询