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相关推荐

  1. VS2019 - 动态库的编写和调用

    VS2019 - 动态库的编写和调用 完善自己知识体系的一些内容: 用C++编写的DLL(动态链接库)中,导出类的接口封装方法总结 详解dll的封装,以及三种调用方法(将±×÷封装为例) 1 VS20 ...

  2. 阐述Linux动态库的显式调用

    阐述Linux动态库的显式调用 分类: Linux 2011-02-12 10:27 168人阅读 评论(0) 收藏 举报 linux测试nulllibrarypathgcc 十年的发展,Linux系 ...

  3. Linux 之三 静态库及动态库的编写和使用

      最近在整理旧电脑时,发现了一些刚入行时的学习记录,以及最早使用新浪博客 http://blog.sina.com.cn/zcshou 写的一些文章.最近要重拾 Linux,所以把这些 Word 文 ...

  4. linux静态库添加文件,Linux静态库和动态库的编写和使用

    Linux静态库和动态库的编写和使用 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 1  静态库和动态库的区别 1.1. 静态函数库 (1)静态函数库的名 ...

  5. C++中.lib静态库、.dll动态库的生成及调用2

    关于动.静态库的介绍及静态库的生成及调用参见:C++中.lib静态库..dll动态库的生成及调用<1>,本文主要介绍基于VS2015平台的动态库dll的生成及调用方法. 一.动态库的生成 ...

  6. C++中.lib静态库、.dll动态库的生成及调用1

    一.前言 1.动态链接库(dll)与静态链接库(lib): 动态链接库(dll)是一个可以被其他应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源.在链接步骤中,连接器将从库文件取得所需的代 ...

  7. 包含目录、库目录、附加包含目录、附加库目录、附加依赖项如何使用? 及静态库,动态库的创建与调用和vs里引用的使用

    引言:vs中怎么添加外部头文件? 如过直接在项目头文件处,添加一下,如下图: 否则,依然会报错,如下图: 有两种方法,来解决(你不在vs上的添加它也没事): (1) 直接把外部头文件复制过来,放在此项 ...

  8. 【Linux】静态库与动态库的生成及调用

    一,库:一种可执行代码的二进制形式,可以被载入内存执行.其中库分为静态库.动态库 二,静态库和动态库的区别          1)Linux 下静态库:名字一般为 lib***.a利用静态函数库编译成 ...

  9. 【C 语言】动态库封装与设计 ( Windows 动态库简介 | Visual Studio 调用动态库 )

    文章目录 一.Windows 动态库简介 二.Visual Studio 调用动态库 一.Windows 动态库简介 在 C:\Windows\System32 目录中 , 存放着 Windows 中 ...

最新文章

  1. 深入探索C++对象模型学习笔记2
  2. runtime 项目实战方法处理
  3. c语言节点有指针域数据域,学习心得:链表的操作(C语言实现)
  4. java redis自增操作_【转载】关于spring boot使用redis的increment()方法自增问题
  5. 【matlab代码】生成特定频率的正弦信号,X轴以时间表示
  6. Spring Boot 微服务性能下降九成!使用 Arthas 定位根因
  7. Xshell 连接ubuntu16.04 32位
  8. python操作微信小程序云端数据库_微信小程序·云开发云数据库的基本使用-微信小程序云开发实例-腾讯云微信小程序...
  9. win8下vs2012加wp8 sdk开发xna4.0PC游戏
  10. 腾讯视频下载下来的视频在哪里
  11. iOS开发GCD(3)-数据安全
  12. 2018美赛C题论文学习笔记1
  13. pyqt创建窗口没有句柄_Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)
  14. Java电阻计算器(二)
  15. win8系统用友U8服务器的设置,用友u8服务器参数配置
  16. Verilog语言菜鸟教程知识关键点记录
  17. python中添加.pth_使用.pth文件扩展python环境路径
  18. python数学公式代码_PythonStudy_‘数学公式计算器’代码
  19. fbm是什么意思_fba是什么意思
  20. 带你掌握Visual Studio Code的格式化程序

热门文章

  1. ajax实现关联词提示
  2. CentOS 配置epel源
  3. P3398仓鼠(LCA)
  4. linux中典型文件档案分析
  5. c++中的字符集与中文
  6. oracle多表查询
  7. 碰撞检测算法:点和矩形碰撞、点和圆形碰撞、矩形碰撞、圆形碰撞
  8. HDU 4418 高斯消元法求概率DP
  9. Android ADB被占用 重启 ADB方法
  10. JAVA基础----java中E,T,?的区别?