Library MyDll
uses 
SysUtils,Windows,Registry,Regstr;  
 
Function ChkBoolean():Boolean;stdcall; 
Begin 
Result:True; 
End; 
 
procedure WriteReg(UserName:pchar);stdcall; 
var 
Reg: TRegistry; 
begin 
Reg:=TRegistry.Create; 
errFind:=False; 
try 
Reg.RootKey:=HKEY_LOCAL_MACHINE; 
If Reg.OpenKey('SOFTWARE\MyDLL\'+UserName,True) then 
Reg.WriteString('Name',UserName); 
finally 
Reg.CloseKey; 
Reg.Free; 
end; 
end; 
 
输入以上的代码,分别是一个函数和一个过程,第一个函数ChkBoolean返回一个真;过程WriteReg读取一个参数并将该参数写入注册表。在程序的最后必须加上一句: 
Exports ChkBoolean,WriteReg; 
这样表示向外声明可提供给应用程序的函数或过程,也只有在这里声明的函数或过程可以给其他应用程序所调用。 
最后,我们编译整个程序,将产生一个MyDll.dll的文件。 
 
现在,让我们创建一个应用程序来调用这个DLL。 
点击File->New Application,保存这个工程,记住要和刚才那个DLL工程在同一个目录。 
在 implementation 下编写如下代码: 
type 
TMyProcedure=procedure(UseNam:pchar);stdcall; 
function ChkBoolean():Boolean; external MyDLL.DLL'; 
第一行定义了一个过程类型,下面会看到这有什么用; 
在我们程序的Form上放置一个TEdit和TButton控件,使其如下图所示: 
  
双击按钮,编写OnClick事件,代码如下: 
 
procedure TForm1.Button1Click(Sender: TObject); 
var 
HInst:Thandle; 
FPointer:TFarProc; 
MyProc:TMyProcedure; 
Begin 
If ChkBoolean Then 
//直接返回函数值,为真,继续运行…… 
Begin 
HInst:=LoadLibrary('MyDLL.DLL'); 
if HInst>0 then 
try 
FPointer:=GetProcAddress(Hinst,Pchar('WriteReg')); 
//GetProcAddress API函数用于找到DLL中的函数名,并返回一个指针 
if FPointer<>nil then 
begin 
MyProc:=TMyProcedure(FPointer); 
//将该函数指针转换成相应的数据类型并调用它 
Try 
MyProc(Edit1.Text); 
except on E:Exception do 
ShowMessage(E.Message); 
end; 
end 
else 
ShowMessage('DLL procedure not found!'); 
finally 
FreeLibrary(HInst); 
end 
else 
ShowMessage('Library not found!'); 
End; 
end; 
 
编写完以上代码,马上运行应用程序。在输入框处输入任意字符,并点击按钮,再打开你的注册表,需要HKEY_LOCAL_MACHINE\ SOFTWARE,看看多了些什么。