XLSReadWriteII2 控件不稳定的原因
发现这个控件 对打印机的设置很敏感 在我这个机器上 该控件表现的非常不稳定 经常打不开项目 或者连累DELPHI崩溃。
后来跟踪代码 发现了真正原因 我的机器上定义了一个不存在的网络打印机 所以导致这样 我安装了一个本地的1600K 驱动以后 就一切正常了。
具体的原因 在在控件初始化的时候 调了下面这段代码
function TXLSReadWriteII2.GetDEVMODE: PDeviceModeW;
var
hDevMode,FPrinterHandle: THandle;
P: PDeviceModeW;
ADevice: PWideChar;
StubDevMode: TDeviceModeW;
sPrinter: string;
begin
if Printer.PrinterIndex < 0 then
FDevMode := Nil
else if FDevMode = Nil then begin
sPrinter := Printer.Printers[Printer.PrinterIndex];
if OpenPrinter(PChar(sPrinter),FPrinterHandle, nil) then begin
GetMem(ADevice,64);
StringToWideChar(sPrinter,ADevice,64);
hDevMode := GlobalAlloc(GHND,DocumentPropertiesW(0, FPrinterHandle, ADevice, StubDevMode, StubDevMode, 0));
if hDevMode <> 0 then begin
P := GlobalLock(hDevMode);
if DocumentPropertiesW(0, FPrinterHandle, ADevice, P^, P^, DM_OUT_BUFFER) < 0 then
FDevMode := Nil
else begin
GetMem(FDevMode,P.dmSize + P.dmDriverExtra);
Move(P^,FDevMode^,P.dmSize + P.dmDriverExtra);
end;
GlobalUnlock(hDevMode);
GlobalFree(hDevMode);
end;
end;
end;
Result := FDevMode;
end;
推荐到鲜果:


评论