动态库的编写和调用 - Delphi
uDll.pas
function Add10(ANum: integer): integer; stdcall; //Delphi 默认采用 register 调用约定,如果dll涉及跨语言调用,最好
明确指出采用 stdcall 调用约定
library MyDll;
uses
ShareMem; // 如果dll 涉及长字符串的参数或变量,需要在 uses 第一的位置引用 ShareMem 单元。
exports
Add10;
可以使用标准指令以方便和加速过程、函数的调用。即 name,index,resident
Add10 name 'NewAdd'; //如果不写 name,默认以过程或函数最初声明的名称为准
Add10 index 1; //如果不写 index,默认编译器按顺序自动分配;index指令只对 windows 系统有用如果要同时使用 name 和 index ,那么 index 必须置于 name 前面
resident 主要为了向后兼容,编译器将忽略它
注意: exports 可以导出重载(overload)函数,但书写函数时必须加上参数。例如:
Add10(ANum: integer) name 'Add10_Int';
Add10(Anum: real) name 'Add10_Real'; //可以加一个 name 分别标示名称。 重载时一定不能用 index 指令
在 Widnows 32 位程序中,两个应用程序的地址空间是相互没有联系的。DLL 在内存中是一份拷贝(每个应用程序的进程空间各自拥有该 DLL 的一个副本及自身的一套全局变量),而变量是在各进程的地址空间中,因此不能借助 DLL 的全局变量来达到两个应用程序间的数据传递,除非使用内存映像文件。
调用 dll:
(1)静态调用
function Add10(ANum: integer): integer; stdcall; external 'MyDll.dll';
注意:
• 必须用 stdcall 作为调用参数。
• 大小写敏感。与 Delphi 程序不同,调用动态链接库是大小写敏感的
(2)动态调用
type
TAdd10 = function(ANum: integer): integer; stdcall;
const
MyDllName = 'MyDll.dll';
var
handle:THandle ;
FPointer: TFarProc;
MyFunc : TAdd10 ;
begin
handle := LoadLibrary(MyDllName); {装载 DLL 到内存}
if handle <> 0 then begin
try
FPointer := GetProcAddress(handle, 'Add10’); {获得函数的入口地址}
//@MyFunc := GetProcAddress(handle, 'Add10’);
//if @MyFunc <> nil then //也可以采用这种编写方式
if FPointer <> nil then begin
MyFunc := TAdd10(FPointer) ;
…………
end;
finally
FreeLibrary(handle); {释放 dll}
end;
end;
end;
转载于:https://www.cnblogs.com/sikale/archive/2011/03/03/1970342.html
动态库的编写和调用 - Delphi相关推荐
- VS2019 - 动态库的编写和调用
VS2019 - 动态库的编写和调用 完善自己知识体系的一些内容: 用C++编写的DLL(动态链接库)中,导出类的接口封装方法总结 详解dll的封装,以及三种调用方法(将±×÷封装为例) 1 VS20 ...
- 阐述Linux动态库的显式调用
阐述Linux动态库的显式调用 分类: Linux 2011-02-12 10:27 168人阅读 评论(0) 收藏 举报 linux测试nulllibrarypathgcc 十年的发展,Linux系 ...
- Linux 之三 静态库及动态库的编写和使用
最近在整理旧电脑时,发现了一些刚入行时的学习记录,以及最早使用新浪博客 http://blog.sina.com.cn/zcshou 写的一些文章.最近要重拾 Linux,所以把这些 Word 文 ...
- linux静态库添加文件,Linux静态库和动态库的编写和使用
Linux静态库和动态库的编写和使用 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 1 静态库和动态库的区别 1.1. 静态函数库 (1)静态函数库的名 ...
- C++中.lib静态库、.dll动态库的生成及调用2
关于动.静态库的介绍及静态库的生成及调用参见:C++中.lib静态库..dll动态库的生成及调用<1>,本文主要介绍基于VS2015平台的动态库dll的生成及调用方法. 一.动态库的生成 ...
- C++中.lib静态库、.dll动态库的生成及调用1
一.前言 1.动态链接库(dll)与静态链接库(lib): 动态链接库(dll)是一个可以被其他应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源.在链接步骤中,连接器将从库文件取得所需的代 ...
- 包含目录、库目录、附加包含目录、附加库目录、附加依赖项如何使用? 及静态库,动态库的创建与调用和vs里引用的使用
引言:vs中怎么添加外部头文件? 如过直接在项目头文件处,添加一下,如下图: 否则,依然会报错,如下图: 有两种方法,来解决(你不在vs上的添加它也没事): (1) 直接把外部头文件复制过来,放在此项 ...
- 【Linux】静态库与动态库的生成及调用
一,库:一种可执行代码的二进制形式,可以被载入内存执行.其中库分为静态库.动态库 二,静态库和动态库的区别 1)Linux 下静态库:名字一般为 lib***.a利用静态函数库编译成 ...
- 【C 语言】动态库封装与设计 ( Windows 动态库简介 | Visual Studio 调用动态库 )
文章目录 一.Windows 动态库简介 二.Visual Studio 调用动态库 一.Windows 动态库简介 在 C:\Windows\System32 目录中 , 存放着 Windows 中 ...
最新文章
- 深入探索C++对象模型学习笔记2
- runtime 项目实战方法处理
- c语言节点有指针域数据域,学习心得:链表的操作(C语言实现)
- java redis自增操作_【转载】关于spring boot使用redis的increment()方法自增问题
- 【matlab代码】生成特定频率的正弦信号,X轴以时间表示
- Spring Boot 微服务性能下降九成!使用 Arthas 定位根因
- Xshell 连接ubuntu16.04 32位
- python操作微信小程序云端数据库_微信小程序·云开发云数据库的基本使用-微信小程序云开发实例-腾讯云微信小程序...
- win8下vs2012加wp8 sdk开发xna4.0PC游戏
- 腾讯视频下载下来的视频在哪里
- iOS开发GCD(3)-数据安全
- 2018美赛C题论文学习笔记1
- pyqt创建窗口没有句柄_Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)
- Java电阻计算器(二)
- win8系统用友U8服务器的设置,用友u8服务器参数配置
- Verilog语言菜鸟教程知识关键点记录
- python中添加.pth_使用.pth文件扩展python环境路径
- python数学公式代码_PythonStudy_‘数学公式计算器’代码
- fbm是什么意思_fba是什么意思
- 带你掌握Visual Studio Code的格式化程序