Delphi 的类型怎么这么乱? (100分)

  • 主题发起人 主题发起人 KYOz
  • 开始时间 开始时间
K

KYOz

Unregistered / Unconfirmed
GUEST, unregistred user!
这是 C 的定义,参数第4、5、7都是同一种LPDWORD类型<br>LONG RegEnumKeyEx(<br>&nbsp; HKEY hKey, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// handle to key to enumerate<br>&nbsp; DWORD dwIndex, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// subkey index<br>&nbsp; LPTSTR lpName, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// subkey name<br>&nbsp; LPDWORD lpcName, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// size of subkey buffer<br>&nbsp; LPDWORD lpReserved, &nbsp; &nbsp; &nbsp; &nbsp; // reserved<br>&nbsp; LPTSTR lpClass, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // class string buffer<br>&nbsp; LPDWORD lpcClass, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // size of class string buffer<br>&nbsp; PFILETIME lpftLastWriteTime // last write time<br>);<br>这是 DELPHI 的定义, 参数第4、5、7同样的类型怎么用了三种不同的类型定义,请问有什么区别么?<br>function RegEnumKeyEx(<br>&nbsp;hKey: HKEY; <br>&nbsp;dwIndex: DWORD; <br>&nbsp;lpName: PChar;<br>&nbsp;var lpcbName: DWORD; &nbsp;// LPDWORD &nbsp; &nbsp;-------+<br>&nbsp;lpReserved: Pointer; &nbsp;// LPDWORD &nbsp; &nbsp;-------+<br>&nbsp;lpClass: PChar; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+---------- 同为LPDWORD类型,为什么用了三种不同的类型定义?有区别么?<br>&nbsp;lpcbClass: PDWORD; &nbsp; &nbsp;// LPDWORD &nbsp; &nbsp;-------+<br>&nbsp;lpftLastWriteTime: PFileTime<br>): Longint; stdcall;<br><br>同一个 LPDWORD 类型,怎么一会儿这样用:var lpcbName: DWORD; <br>一会儿又 lpReserved: Pointer; <br>再过一会儿又 &nbsp;lpcbClass: PDWORD; <br><br>这有什么区别吗?<br>真受不了 borland<br>
 
前面不是delphi<br>后面是
 
C的表述和Pascal的表述当然会不一样。
 
&gt;&gt;前面不是delphi<br>&gt;&gt;后面是<br><br>狂晕!我知道,前面的是C类型的,我拿出来跟Delphi比较
 
爱用不用
 
&gt;&gt;C的表述和Pascal的表述当然会不一样。<br><br>晕死了,老大啊,这我当然知道的。<br>我是问Delphi的对一个C里面的LPDWORD定义怎么至少有三种??有何不同??<br>
 
C里面不也一会LPTSTR、LPDWORD吗?<br>你先搞懂各种类型的意义再说,熟能生巧!
 
&gt;&gt;爱用不用<br><br>FAINT~~~~<br>今天是怎么了,就是因为我喜欢Delphi,我才需要了解,拜托了,老大。<br>分特~
 
可能是我没说清楚,再说一遍<br><br>function RegEnumKeyEx(hKey: HKEY; <br>&nbsp;dwIndex: DWORD; <br>&nbsp;lpName: PChar;<br>&nbsp;var lpcbName: DWORD; &nbsp;// 这是一个 LPDWORD<br>&nbsp;lpReserved: Pointer; &nbsp;// 这也是一个 LPDWORD<br>&nbsp;lpClass: PChar; &nbsp; &nbsp; &nbsp; <br>&nbsp;lpcbClass: PDWORD; &nbsp; &nbsp;// 这也是一个 LPDWORD<br>&nbsp;lpftLastWriteTime: PFileTime<br>): Longint; stdcall;<br><br>为什么这同属一种LPDWORD的类型用了三种不同的定义?<br>var ... DWORD<br>Pointer<br>PDWORD<br>拜托,老大
 
大哥,你是用c用久了,delphi本身封装windows的类型,在那些层次上细化了,你慢慢会习惯的。s
 
DWORD为四字节整数、POINTER为指针类型、PDWORD为指向函数列表的指针、Pchar为指向字符的指针、<br>PChar也是Pointer指针类型。<br>如:<br>new(Result);<br>GetVolumeInformation(pChar(DriveName+'/'),Nil,0,Result,temp1,temp2,Nil,0);<br>Result:=Result^;<br>DisPose(Result);<br>其中temp1,temp2:DWord; &nbsp;Result:PDWord;<br>另例如:GetMem(WinDir,256); 其中WinDir为Pchar类型,当然为Pointer也可!<br><br>TO KYOz: 既然你喜欢Delphi,就要学着去包容它。其实说穿了,还是一个习惯问题!
 
呵呵[:)]<br>C为了保持操作的灵活性,指针的定义只有一种,就是*,所谓的LPWORD,LPSTR等等,<br>不过是宏定义。不算是类型,只能称是助记符。对一个指针,你可以进行任何操作,只要你高兴:)<br>而Pascal的类型就很严格,指针有类型指针,无类型指针,不同类型的指针不能直接赋值和<br>操作,除非先进行类型转换。<br><br>另外,关于函数的描述,又牵扯到两种语言的参数调用规则<br>在C中,函数参数只有一种传值调用,传递到函数的变量都是拷贝,如果想对此变量操作,<br>就要采用所谓的传址调用,实际上,仍然是传值,即显示传递变量的地址的值。<br>在Pascal中,用Const参数进行传值调用,Var参数传址调用。Var参数,表面上看是类型变量,<br>实际是对变量的地址的引用。<br><br>
 
多人接受答案了。
 
后退
顶部