1. Delphi生成DLL文件
Unit文件与普通Unit文件差别不大,只是在函数声明处略有不同,如下图:
在.dpr 文件内的改动有几处:
可以看到,第一行的program更改成了library,{$R *.res}下面添加了exports语句,用于表示外部调用DLL文件时的接口函数,注意这个地方只写函数名称,参数等省略掉。Begin和end之间的内容全部删掉(通常之间的内容是自动生成的)。
另外比较重要的一点是,由于要调用的函数参数内有些是String类型,导致DLL文件和宿主程序的内存不在一起,需要在工程文件的uses列表内添加了ShareMem,而且必须加在第一个的位置。
2. DLL的静态调用
在Unit文件内调用DLL里的函数时需要做一下声明:
这样就可以在此Unit内任意调用DLL里的函数了。当然如果DLL里的函数比较多的话可以单独做一个声明Unit文件。
另外,在工程文件内的Uses列表内也需要加入ShareMem,而且必须是第一个。
由于引用了ShareMem,当在没有安装delphi的机器上运行宿主程序时,需要将delphi\bin目录下的borlndmm.dll一起添加到宿主程序根目录下。