* 사용환경 : 델파이4 / Windows 98
* 에러 메시지 :
[Error] Unit1.pas(47): Types of actual and formal var parameters must be identical
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, WinSvc;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function ServiceStartStatus(sService : string ) : DWord;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(IntToStr(ServiceStartStatus('ServiceServerDemon')));
end;
// 리턴값이 0이면 에러, 1이면 자동실행, 2이면 수동실행이다.
function TForm1.ServiceStartStatus(sService : string ) : DWord;
var
schm, schs : SC_Handle;
ss : TQueryServiceConfig;
dwStat, temp : Integer;
begin
dwStat := 0;
schm := OpenSCManager(Nil,Nil,SC_MANAGER_CONNECT);
if(schm > 0)then
begin
schs := OpenService(schm,PChar(sService),SERVICE_QUERY_CONFIG);
if(schs > 0)then
begin
if QueryServiceConfig(schs,ss,SizeOf(ss),temp) then dwStat := ss.dwStartType;
CloseServiceHandle(schs);
end;
CloseServiceHandle(schm);
end;
if SERVICE_AUTO_START = dwStat then
dwStat := 1;
if SERVICE_DEMAND_START = dwStat then
dwStat := 2;
Result := dwStat;
end;
end.
> * 사용환경 : 델파이4 / Windows 98
> * 에러 메시지 :
>
>
> [Error] Unit1.pas(47): Types of actual and formal var parameters must be identical
> [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
>
>
> unit Unit1;
>
> interface
>
> uses
> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
> StdCtrls, WinSvc;
>
> type
> TForm1 = class(TForm)
> Button1: TButton;
> procedure Button1Click(Sender: TObject);
> private
> { Private declarations }
> function ServiceStartStatus(sService : string ) : DWord;
> public
> { Public declarations }
> end;
>
> var
> Form1: TForm1;
>
> implementation
>
> {$R *.DFM}
>
>
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> showmessage(IntToStr(ServiceStartStatus('ServiceServerDemon')));
> end;
>
> // 리턴값이 0이면 에러, 1이면 자동실행, 2이면 수동실행이다.
> function TForm1.ServiceStartStatus(sService : string ) : DWord;
> var
> schm, schs : SC_Handle;
> ss : TQueryServiceConfig;
> dwStat, temp : Integer;
> begin
> dwStat := 0;
> schm := OpenSCManager(Nil,Nil,SC_MANAGER_CONNECT);
> if(schm > 0)then
> begin
> schs := OpenService(schm,PChar(sService),SERVICE_QUERY_CONFIG);
> if(schs > 0)then
> begin
> if QueryServiceConfig(schs,ss,SizeOf(ss),temp) then dwStat := ss.dwStartType;
> CloseServiceHandle(schs);
> end;
> CloseServiceHandle(schm);
> end;
>
> if SERVICE_AUTO_START = dwStat then
> dwStat := 1;
>
> if SERVICE_DEMAND_START = dwStat then
> dwStat := 2;
>
> Result := dwStat;
> end;
>
> end.
>
>
정확히는 모르겠지만 위에 쓰인 함수 중에 파라미터값으로 var형 변수를 갖는 것이 있는 것 같은데요. 맞는지요? 그렇다면 그 함수의 인자로 넘겨주는 값도 var형으로 써주셔야 될 것 같은데요. OpenService함수가 그렇지 않을까 모르겠네요.