dll的代码如下:
library GetServicesStatus;
uses
  SysUtils,
  WinSvc,
  Classes;{$R *.res}
Function GetServicesStatusString(sServiceName:string):String;stdcall;
var
  hService, hSCManager: SC_HANDLE;
  SS: TServiceStatus;
begin
  hSCManager := OpenSCManager(nil, SERVICES_ACTIVE_DATABASE, SC_MANAGER_CONNECT);
  if hSCManager = 0 then 
  begin
    result := 'Can not open the service control manager';
    exit;
  end;
  hService :=OpenService(hSCManager, PChar(sServiceName), SERVICE_QUERY_STATUS);
  if hService = 0 then
  begin 
    CloseServiceHandle(hSCManager);
    result := 'Can not open the service(' + sServiceName + ')'; 
    exit; 
  end; 
  if not QueryServiceStatus(hService, SS) then 
    result := 'Can not query the service status' 
  else 
  begin 
    case SS.dwCurrentState of 
      SERVICE_CONTINUE_PENDING: 
        result := 'The service(' + sServiceName + ') continue is pending';
      SERVICE_PAUSE_PENDING:
        result := 'The service(' + sServiceName + ') pause is pending.'; 
      SERVICE_PAUSED: 
        result := 'The service(' + sServiceName + ') is paused.'; 
      SERVICE_RUNNING: 
        result := '  ' + sServiceName + '  正在运行';
      SERVICE_START_PENDING: 
        result := '  ' + sServiceName + '  正在启动';
      SERVICE_STOP_PENDING: 
        result := '  ' + sServiceName + '  正在停止';
      SERVICE_STOPPED:
        result := '  ' + sServiceName + '  已经停止';
    else 
      result := '  未知状态'; 
    end; 
  end; 
  CloseServiceHandle(hSCManager); 
  CloseServiceHandle(hService);
End;
/////////////////////////
Function GetServicesStatusInt(sServiceName:string):Integer;stdcall;
var
  hService, hSCManager: SC_HANDLE;
  SS: TServiceStatus;
begin
  hSCManager := OpenSCManager(nil, SERVICES_ACTIVE_DATABASE, SC_MANAGER_CONNECT);
  if hSCManager = 0 then 
  begin
    result := 0;
    exit;
  end;
  hService :=OpenService(hSCManager, PChar(sServiceName), SERVICE_QUERY_STATUS);
  if hService = 0 then
  begin 
    CloseServiceHandle(hSCManager);
    result := 1;//'Can not open the service(' + sServiceName + ')';
    exit; 
  end; 
  if not QueryServiceStatus(hService, SS) then 
    result := 2 //'Can not query the service status'
  else
  begin 
    case SS.dwCurrentState of 
      SERVICE_CONTINUE_PENDING: 
        result := 3;//'The service(' + sServiceName + ') continue is pending';
      SERVICE_PAUSE_PENDING:
        result := 4;//'The service(' + sServiceName + ') pause is pending.';
      SERVICE_PAUSED: 
        result := 5;//'The service(' + sServiceName + ') is paused.';
      SERVICE_RUNNING: 
        result := 6;//'  ' + sServiceName + '  正在运行';
      SERVICE_START_PENDING: 
        result := 7;//'  ' + sServiceName + '  正在启动';
      SERVICE_STOP_PENDING: 
        result := 8;//'  ' + sServiceName + '  正在停止';
      SERVICE_STOPPED:
        result := 9;//'  ' + sServiceName + '  已经停止';
    else 
      result := 10;//'  未知状态';
    end; 
  end; 
  CloseServiceHandle(hSCManager); 
  CloseServiceHandle(hService);
End;exports
GetServicesStatusString,
GetServicesStatusInt;
begin
end.调用时如下:procedure TForm1.FormShow(Sender: TObject);
begin
  ListBox1.Items.Add(DateTimeToStr(Now)+'  程序目录'+ExtractFilePath(Application.Exename));
  ListBox1.Items.Add(DateTimeToStr(Now)+'  程序启动成功');
  ListBox1.Items.Add(DateTimeToStr(Now)+'  服务'+GetServicesStatusString('mysql'));
  ListBox1.Items.Add(DateTimeToStr(Now)+'  服务'+GetServicesStatusString('apache2.2'));
end;运行时出错:invalid pointer operation但去掉ListBox1.Items.Add(DateTimeToStr(Now)+'  服务'+GetServicesStatusString('apache2.2'));后就正常