为什么可以先声明一个不存在的指针类型的变量,然后再获得这个指针类型???请看里面的代码!(20分)

  • 主题发起人 主题发起人 随便看看
  • 开始时间 开始时间

随便看看

Unregistered / Unconfirmed
GUEST, unregistred user!
这是d5开发人员指南里面关于打印信封的一个函数:
procedure TMainForm.SetCopies(Copies: Integer);
var
ADevice, ADriver, APort: String;
ADeviceMode: THandle;
DevMode: PDeviceMode
//这个指针类型并不存在!
begin
SetLength(ADevice, 255);
SetLength(ADriver, 255);
SetLength(APort, 255);

{ If ADeviceMode is zero, a printer driver is not loaded. Therefore,
setting PrinterIndex forces the driver to load. }
if ADeviceMode = 0 then
begin
Printer.PrinterIndex := Printer.PrinterIndex;
Printer.GetPrinter(PChar(ADevice), PChar(ADriver), PChar(APort), ADeviceMode);
end;

if ADeviceMode <> 0 then
begin
DevMode := GlobalLock(ADeviceMode);
try
DevMode^.dmFields := DevMode^.dmFields or DM_Copies;
DevMode^.dmCopies := Copies;
finally
GlobalUnlock(ADeviceMode);
end;
end
else
raise Exception.Create('Could not set printer copies');
end;
书上说PDeviceMode是TDeviceMode类型的指针,可是delphi的帮助里却找不到TDeviceMode这个类型,只有win32 sdk的DEVMODE结构类型!
 
Delphi 的帮助里面没有并不代表这个类型没有定义,如果没有定义,你怎么能引用它?你把鼠标指向PDeviceMode,然后按下Ctrl+鼠标左键看看?那是定义在Windows 单元中的一个类型。因为Win32API 是用C语言来写的,它的调用语法用的也是C的语法,Delphi 用的是Object Pascal 语言,为了能调用用C写成的Windows API,Delphi 把Windows API 所有的数据类型、函数等都用Object Pascal 的语法重新定义了一遍,像PDeviceMode就是其中的一个。由于这些数据类型、函数都是与相应的API 数据类型、函数一一对应的,都能在Win32API 编程手册中查到,所以Delphi 也就没有必要再在自己的Help 里重新说明一次了。
 
但是,如果不知道delphi是用什么名称定义的,那么该到什么地方查呢?帮助里没有,而windows单元文件的内容好像没办法看吧??
 
怎么会不能查看,你把鼠标指向PDeviceMode,按下Ctrl+鼠标左键,就可以打开Windows 这个单元并转到PDeviceMode的定义那里了啊。
 
PDeviceMode这个指针定义在windows.pas文件的13874行。
 
你要记住,BORLAND的帮助文档做的可不怎么样,地球人都知道。。。。。。
 
后退
顶部