dll程序: 
library   DBOperation; {   Important   note   about   DLL   memory   management:   ShareMem   must   be   the 
    first   unit   in   your   library's   USES   clause   AND   your   project's   (select 
    Project-View   Source)   USES   clause   if   your   DLL   exports   any   procedures   or 
    functions   that   pass   strings   as   parameters   or   function   results.   This 
    applies   to   all   strings   passed   to   and   from   your   DLL--even   those   that 
    are   nested   in   records   and   classes.   ShareMem   is   the   interface   unit   to 
    the   BORLNDMM.DLL   shared   memory   manager,   which   must   be   deployed   along 
    with   your   DLL.   To   avoid   using   BORLNDMM.DLL,   pass   string   information 
    using   PChar   or   ShortString   parameters.   } uses 
    SysUtils, 
    Classes, 
    ActiveX, 
    u_DBOperation   in   'u_DBOperation.pas'; {$R   *.res} exports 
    DBOper   name   'DBOper', 
    GetConnection   name   'GetConnection', 
    GetValueByFieldName   name   'GetValueByFieldName';     
begin end. unit   u_DBOperation; interface uses 
    Windows,   Messages,   SysUtils,   Variants,   Classes,DB,   ADODB,IniFiles,Dialogs,   ActiveX; 
    //function   GetConnection(var   v_ADOConnection:TADOConnection)   :boolean;     {============================= 
    创建人:LFL 
    创建日期:2008-1-1 
    功能:记录数据库操作的记录 
    入口参数:Operator:有关信息;     Event:所在过程、函数或事件的名称; 
                      SucceedFlag:操作是否成功。 
    ==============================} 
    procedure   DBErrorLog(Operator,   Event:String;   SucceedFlag:Boolean);     {============================= 
    ***注:这里没有释放v_qryOpen的变量.***     创建人:LFL 
    创建日期:2008-1-1 
    功能:根据SQL语句得到数据集TADOQuery 
    入口参数:i_sSQL:SQL语句;     i_AdoConneton:要连接的AdoConneton   ; 
                      v_qryOpen:该数据集的地址。 
    返回参数:假如操作成功,返回True,否则返回False; 
    ==============================} 
    function   DBOper(i_sSQL:   string;   i_AdoConnetion:   TADOConnection; 
        var     v_qryOpen:   TADOQuery):   Boolean;     {============================= 
    创建人:LFL 
    创建日期:2008-1-2 
    功能:根据SQL语句得到数据集TADOQuery 
    入口参数:i_sSQL:SQL语句;     i_AdoConneton:要连接的AdoConneton   ; 
                      i_sFieldName:要获得值的字段。 
    返回参数:i_sFieldName字段的值; 
    ==============================} 
    function   GetValueByFieldName(i_sSQL:   string;   i_AdoConnetion:   TADOConnection; 
            i_sFieldName:   string):   string; 
const 
    SYS_CONFIG_FILE   =   'sysConfig.ini'; 
    EVENT_LOG   =   'DBErrorLog.txt'; implementation function   GetValueByFieldName(i_sSQL:   string;   i_AdoConnetion:   TADOConnection; 
        i_sFieldName:   string):   string; 
{============================= 
创建人:LFL 
创建日期:2008-1-2 
功能:根据SQL语句得到数据集TADOQuery 
入口参数:i_sSQL:SQL语句;     i_AdoConneton:要连接的AdoConneton   ; 
                  i_sFieldName:要获得值的字段。 
返回参数:i_sFieldName字段的值; 
==============================} 
var 
    v_qryGetValue:   TADOQuery; 
begin 
    DBOper(i_sSQL,   i_AdoConnetion,   v_qryGetValue);     //得到指定的字段的值 
    Result   :=   v_qryGetValue.FieldByName(i_sFieldName).AsString;     if   v_qryGetValue   <>   nil   then 
    begin 
        v_qryGetValue.Free; 
        v_qryGetValue   :=   nil; 
    end;     end;     function   DBOper(i_sSQL:   string;   i_AdoConnetion:   TADOConnection; 
    var     v_qryOpen:   TADOQuery):   Boolean; 
{============================= 
创建人:LFL 
创建日期:2008-1-1 
功能:根据SQL语句得到数据集TADOQuery 
入口参数:i_sSQL:SQL语句;     i_AdoConneton:要连接的AdoConneton   ; 
                  v_qryOpen:该数据集的地址。 
返回参数:假如操作成功,返回True,否则返回False; ***注:这里没有释放v_qryOpen的变量.*** 
==============================} 
begin 
    CoInitialize(nil); 
    if   not   Assigned(v_qryOpen)   then 
    begin 
        v_qryOpen   :=   TADOQuery.Create(nil); 
        v_qryOpen.Connection   :=   i_AdoConnetion; 
    end;         try 
        with   v_qryOpen   do 
        begin 
            close; 
            SQL.Text   :=   i_sSQL; 
            Open; 
        end; 
        Result   :=   True; 
    except 
        DBErrorLog(i_sSQL,   'DBOper',   False); 
        Result   :=   False; 
    end;     CoUninitialize; 
end; 
调用该dll的程序 
procedure   TForm1.btn1Click(Sender:   TObject); 
var 
    v_qry:   TADOQuery; 
begin 
    v_qry   :=   TADOQuery.Create(nil); 
    DBOper('select   *   from   tbl_customer',   con1,   v_qry); 
    btn1.Caption   :=   v_qry.Fields[0].AsString;     exit; end; 
unit   UntDBOperationDll; interface 
    uses   DB,   ADODB; 
    {============================= 
    ***注:这里没有释放v_qryOpen的变量.***     创建人:LFL 
    创建日期:2008-1-1 
    功能:根据SQL语句得到数据集TADOQuery 
    入口参数:i_sSQL:SQL语句;     i_AdoConneton:要连接的AdoConneton   ; 
                      v_qryOpen:该数据集的地址。 
    返回参数:假如操作成功,返回True,否则返回False; 
    ==============================} 
    function   DBOper(i_sSQL:   string;   i_AdoConneton:   TADOConnection; 
        var   v_qryOpen:   TADOQuery):   Boolean;   stdcall;     function   GetConnection(var   v_ADOConnection:TADOConnection)   :Boolean;   stdcall;     {============================= 
    创建人:LFL 
    创建日期:2008-1-2 
    功能:根据SQL语句得到数据集TADOQuery 
    入口参数:i_sSQL:SQL语句;     i_AdoConneton:要连接的AdoConneton   ; 
                      i_sFieldName:要获得值的字段。 
    返回参数:i_sFieldName字段的值; 
    ==============================} 
    function   GetValueByFieldName(i_sSQL:   string;   i_AdoConnetion:   TADOConnection; 
        i_sFieldName:   string):   string;   stdcall; 
    
const 
    DBDLLName   =   'DBOperation.dll'; implementation function   DBOper(i_sSQL:   string;   i_AdoConneton:   TADOConnection; 
    var   v_qryOpen:   TADOQuery):   Boolean;   stdcall; 
    external   DBDLLName   name   'DBOper'; function   GetConnection(var   v_ADOConnection:TADOConnection)   :Boolean;   stdcall; 
    external   DBDLLName   name   'GetConnection'; function   GetValueByFieldName(i_sSQL:   string;   i_AdoConnetion:   TADOConnection; 
    i_sFieldName:   string):   string;   stdcall; 
    external   DBDLLName   name   'GetValueByFieldName'; 
end. 
问题:access   violation   at   address   00559c23   in   module   'DBOperation.DLL'   read   of   address   01000000