在Borland C++ Builder6中写DLL初步入门
来源:互联网 发布:JS删除disabled 编辑:程序博客网 时间:2024/04/29 08:26
在BORLAND C++ BUILDER6 写DLL初步实验. 虽然简单, 但是基本弄清了点眉目:
主要步骤: 1 写一个DLL 2 写一个APP来调用DLL
1. 写一个DLL
FILE->NEW-> DLL WIZARD 选C++ 及VCL 这时根据向导生成了一个DLL框架, 看上去很像一个普通的app, 下面完善并修改代码, 定义自己的一个DLL函数 myindlltest (void):
#pragma argsused
extern "C" __declspec(dllexport) int __stdcall myindlltest(void);
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
int __stdcall myindlltest(void)
{
return 3;
}
注意在编译时, 还是老样子(俗称"去2勾"): project->options.. 选packages页,去掉勾Build with runtime packages
选linker页, 去掉勾Use Dynamic RTL
这第一步完成了, 我们可以找到类似 project1.lib 和 project1.dll 2个文件, 下一步会用到
2 写一个APP来调用DLL
FILE->NEW->APPLICATION 建立一个新工程, 在project manager中,将刚才的project1.lib添加进来. 另外将project1.dll 复制到当前的app目录下, 便于下一步调用.
在窗体上添加一个Edit1, 一个command button,
然后在头文件中加入接口声明,例如:
extern "C" __declspec(dllexport) int __stdcall myindlltest(void);
准备工作完成, 可以调用了.
有两种方式调用: 静态和动态
(1)静态调用方法:
int i;
i = myindlltest();
Edit1->Text = i;
在Edit1框中出现3, 说明我们调用成功
(2) 动态调用方法:
HINSTANCE dd;
int __stdcall(*ddd)(void);
dd = LoadLibrary("Project1.dll");
ddd = GetProcAddress(dd,"myindlltest");
Edit1->Text = IntToStr(ddd());
FreeLibrary(dd);
在Edit1框中出现3, 说明我们调用成功.
讲完了, 虽然很初级, 但是毕竟是一个简单易入门的例子. 一些扩展知识没讲到,比如单就调用方式而言就有__cdecl, __pascal, __fastcall, __stdcall之分, 为了简化起见我们只用了__stdcall一种方式.
补充:对于动态调用,上面的例子只是适用于导出函数返回值是int 或void,并且参数是0的,至于其它类型,需要进行函数指针类型转换,所以更为通用的写法是(以返回值为char, 参数为char的函数指针为例):
先定义类型
typedef char __stdcall(*TMyFunction)(char);
再
HINSTANCE mylibhandle = LoadLibrary("mysqlite3dll.dll");
TMyFunction myfunchandle = (TMyFunction)GetProcAddress(mylibhandle,"mydlltest"); //指针转换,很重要
Edit1->Text = myfunchandle("A");
FreeLibrary(mylibhandle);
- 在Borland C++ Builder6中写DLL初步入门
- 在Borland C++Builder中检查程序
- 在C++ Builder6中使用XML
- 在C++ Builder6中使用XML
- 在C++ Builder6中使用XML
- 在C++ Builder6中使用XML
- 在C#中使用C/C++写的DLL
- 在C#中使用C/C++写的DLL
- 如何在C#中使用C/C++写的DLL。
- 在C#中使用C/C++写的DLL
- 在C++Builder6中使用DCEF3嵌入谷歌内核浏览器
- 在 Borland C++BuilderX for Windows 中进行 GTK+ 编程
- 在C++Builder6上使用Boost正则表达式库
- 在C++builder6下安装ace编译环境
- 在C++ Builder6中使用XML Aweay [原作]
- C入门:用C写简单的DLL
- DLL初步和钩子入门
- 举例说明如何在C#中使用C/C++写的DLL
- 在ubuntu上安装QT Creator并配置编译环境
- 胡思乱想:由"什么都可以骗人,但成交量不骗人"想到的
- C++ BUILDER6里的ini文件读写
- 词汇学习:边缘政策(BRINKMANSHIP)
- FPC学习
- 在Borland C++ Builder6中写DLL初步入门
- C++ builder里写一个渐变条
- linux下的新的ftp工具lftp-支持文件名补全提示功能
- fedora或redhat linux下设置静态IP
- fedora12下配置Apache
- fedora12下配置Apache
- fedora12下启动SSH便于远程登录
- NOKIA5110 LCD使用心得之坐标与字模(多原理少代码版)
- [转]毕业后的五年拉开大家差距的原因在哪里?