S
savetime
Unregistered / Unconfirmed
GUEST, unregistred user!
例如一个 Win32 API 函数,后面四个参数都是 DWORD 指针:<br>BOOL GetDiskFreeSpace(<br> LPCTSTR lpRootPathName,<br> LPDWORD lpSectorsPerCluster,<br> LPDWORD lpBytesPerSector,<br> LPDWORD lpNumberOfFreeClusters,<br> LPDWORD lpTotalNumberOfClusters<br>);<br><br>在 Windows.pas 中声明如下:<br>function GetDiskFreeSpace; external kernel32 name 'GetDiskFreeSpaceA';<br><br>以下代码编译时会出错(注意参数前的取地址符),并会提示参数是 var 类型的。<br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br> secspclu,bytespsec,freeclu,totalclu,ts,fsWord;<br>begin<br> GetDiskFreeSpace('C:/', @secspclu, @bytespsec, @freeclu, @totalclu);<br> fs:=freeclu*secspclu*bytespsec;<br> //磁盘的剩余空间(字节为单位)<br> ts:=totalclu*secspclu*bytespsec;<br> //磁盘的总容量(字节为单位)<br> edit2.text:=formatfloat('###,###',fs);<br> edit1.text:=formatfloat('###,###',ts);<br> //将结果格式化并显示在两个TEdit组件中<br>end;<br><br>Delphi 如何知道 Win32 API 的参数是指针还是值调用呢(什么情况下生成 var 类型的<br>参数)?<br>可能相关的问题是:用 C 写 Win32 应用程序时需要一个 lib 文件定位 Dll 函数,但<br>Delphi 为什么不需要?<br>