调用了一个api函数,说“形参与实参必须一致”,是不是类型不对?(50分)

  • 主题发起人 主题发起人 lmsx
  • 开始时间 开始时间
L

lmsx

Unregistered / Unconfirmed
GUEST, unregistred user!
我调用的函数:<br>BOOL GetNumberOfEventLogRecords(<br>&nbsp; &nbsp; HANDLE hEventLog, // handle to event log <br>&nbsp; &nbsp; PDWORD NumberOfRecords // buffer for number of records <br>&nbsp; &nbsp;);<br>我的程序:<br>procedure TForm1.Button1Click(Sender: TObject);<br>var hEventlog:Thandle;<br>&nbsp; &nbsp; count:pdword;<br>begin<br>&nbsp; &nbsp;hEventlog:=openeventlog('kk','SYSTEM//CurrentControlSet//Services//EventLog//system//');<br>&nbsp; &nbsp;showmessage(inttostr(hEventlog));<br>if not GetNumberofEventLogRecords(hEventlog,count) then********<br>&nbsp; &nbsp; &nbsp;showmessage(inttostr(i));<br>end;<br>带*的那以行说<br>[Error] Unit1.pas(34): Types of actual and formal var parameters must be identical<br>程序该怎么写呢?
 
api中的pword类型到底和delphi中的什么类型一样?
 
该函数来自advapi32.dll,可以获取事件记录中的记录数。<br>count:pdword指向记录的指针 <br>你用dword(count^)试试!<br>
 
THE ERORR IS RIGHT!
 
YB_unique:<br>可以详细一点么?
 
呵呵!楼上的也言之有理!
 
我认为将Count设为integer更为合理。<br><br>因为Pdword是指向Dword指针,而Dword在Delphi中是用Integer表示。<br>在Delphi中一般这种函数会被翻为var count:integer。<br><br>不知道说的对不对,看看Delphi对这个函数的申明就可以了么。<br><br>
 
改为integer类型以后还是同样的错误
 
既然是out类型,直接用dword好了.<br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; hEventlog:THandle;<br>&nbsp; count:dword;<br>begin<br>&nbsp; hEventlog:=openeventlog('kk','SYSTEM//CurrentControlSet//Services//EventLog//system//');<br>&nbsp; GetNumberOfEventLogRecords(hEventLog,count);<br>&nbsp; showmessage(inttostr(count));<br>end
 
我把类型改为cardinal就对了!<br>呵呵<br>还是一样谢谢大家!
 
多人接受答案了。
 
为什么我用<br>LogHandle:=OpenEventLog(nil,'HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/EventLog/System/');<br>GetNumberOfEventLogRecords(LogHandle,count);<br>showmessage(inttostr(count));<br><br>打出来总是应用程序日志的数量????<br>
 
后退
顶部