Delphi语言学习10编写动态链接库

本文包括如下话题:

  • 导出分句
  • 动态链接库初始化
  • 全局变量
  • 库和系统变量

1.使用导出分句

    下面是的例子是用动态链接库(dll)编写的两个函数,Min和Max

Code

2.动态链接库初始化

1)动态链接库的初始化代码的DllProc函数在动态链接库第一加载到内存,一个线程启动或停止,或者一个动态链接库卸载的时候执行。

2)调用动态链接库的单元的初始话代码在动态链接库初始化代码执行后执行

3)动态链接库的结束代码在单元代码结束代码执行前执行。

Code

3.动态链接库的全局变量

动态链接库中的全局变量不能导出到Delphi应用程序。

4.系统变量(用作动态链接库回调函数的返回值)

DLL_PROCESS_DETACH  
Indicates that the library is detaching from the address space of the calling process as a result of a clean exit or a call to FreeLibrary. (动态链接库卸载) 
DLL_PROCESS_ATTACH  
Indicates that the library is attaching to the address space of the calling process as the result of a call to LoadLibrary. (动态链接库加载) 
DLL_THREAD_ATTACH  
Indicates that the current process is creating a new thread. (动态链接库进入一个新线程) 
DLL_THREAD_DETACH  
Indicates that a thread is exiting cleanly. (动态链接库从一个线程退出)

 5.异常处理

1)用Delphi调用Delphi编写的DLL可以使用 try...except 捕获

2)其他语言调用Delphi编写的Dll可以使用系统变量$0EEDFADE,它是一个数组,第一个入口地址是异常的系统地址,第二个入口是Delphi异常对象( Delphi exception object)。

注意:

如果不使用SysUtils单元,异常机制将不起作用。当程序发生异常时,应用程序会从系统中退出。

6.在Win32下动态链接库的共享内存管理

如果动态链接库数据的数据类型是应用类型(比如:long strings,动态数组,对象,结构体等等),则客户程序必须引用ShareMem单元。

原文地址:https://www.cnblogs.com/wxf82610/p/1392174.html