Hallo<br>
ich benutze diese Procedure um Drucker Informationen auszulesen<br>
auf den meisten getesteten PCs (Win98 - W2K) funktioniert das auch ...<br>
ein PC hat aber das Problem das eine Pointer Error Exception verursacht wird. <br>Beim Debugen auf dem PC läuft die Funktion durch bis Freemem(Buffer,Count), oder die Procedure verlassen wird, und dann kommt die Exception ...<br><br>
<b>Hat jemand ne Idee ?</b><br><br>
<p>Procedure WritePrinterInfo(var RL:TStringList; isNt:Boolean);</p>
<p>var Buffer: PByte;<br> myPrinterInfo2:array of PRINTER_INFO_2;<br> Flags,
Count, NumInfo: DWORD;<br> i:Integer;<br>begin</p>
<p> if isNt then Flags := (PRINTER_ENUM_CONNECTIONS or PRINTER_ENUM_LOCAL)<br> else
Flags := PRINTER_ENUM_LOCAL;<br> Count := 0;<br> Try<br> E numPrinters(Flags,
nil,2, nil, 0, Count, NumInfo);<br> if Count = 0 then
Exit;<br> <i>GetMem(Buffer, Count);</i><br><br> try<br> &nb sp; if
not EnumPrinters(Flags, nil,2, PByte(Buffer), Count, Count, NumInfo) then<br> Exit;<br>   ;myPrinterInfo2
:=@Buffer^;<br>   ;for I := 0 to NumInfo - 1
do<br> begin<br > R L.Add(Format('%s_%d=%s',['Printer',i,myPrinterInfo2[i].pPrinterName]));<br> & nbsp;RL.Add(Format('%s_%d=%s',['PrinterDriver',i,myPrinterInfo2[i].pDriverName]));<br> & nbsp;RL.Add(Format('%s_%d=%s',['PrinterPort',i,myPrinterInfo2[i].pPortName]));<br> end;<br > RL.Add(Format ('PrinterCount=%d',[NumInfo]));<br> finally<br> &n bsp; <i>FreeMem(Buffer,
Count);</i><br> end;<br> Except<br> exit;<br> & nbsp;end;<br>end;</p>
ich benutze diese Procedure um Drucker Informationen auszulesen<br>
auf den meisten getesteten PCs (Win98 - W2K) funktioniert das auch ...<br>
ein PC hat aber das Problem das eine Pointer Error Exception verursacht wird. <br>Beim Debugen auf dem PC läuft die Funktion durch bis Freemem(Buffer,Count), oder die Procedure verlassen wird, und dann kommt die Exception ...<br><br>
<b>Hat jemand ne Idee ?</b><br><br>
<p>Procedure WritePrinterInfo(var RL:TStringList; isNt:Boolean);</p>
<p>var Buffer: PByte;<br> myPrinterInfo2:array of PRINTER_INFO_2;<br> Flags,
Count, NumInfo: DWORD;<br> i:Integer;<br>begin</p>
<p> if isNt then Flags := (PRINTER_ENUM_CONNECTIONS or PRINTER_ENUM_LOCAL)<br> else
Flags := PRINTER_ENUM_LOCAL;<br> Count := 0;<br> Try<br> E numPrinters(Flags,
nil,2, nil, 0, Count, NumInfo);<br> if Count = 0 then
Exit;<br> <i>GetMem(Buffer, Count);</i><br><br> try<br> &nb sp; if
not EnumPrinters(Flags, nil,2, PByte(Buffer), Count, Count, NumInfo) then<br> Exit;<br>   ;myPrinterInfo2
:=@Buffer^;<br>   ;for I := 0 to NumInfo - 1
do<br> begin<br > R L.Add(Format('%s_%d=%s',['Printer',i,myPrinterInfo2[i].pPrinterName]));<br> & nbsp;RL.Add(Format('%s_%d=%s',['PrinterDriver',i,myPrinterInfo2[i].pDriverName]));<br> & nbsp;RL.Add(Format('%s_%d=%s',['PrinterPort',i,myPrinterInfo2[i].pPortName]));<br> end;<br > RL.Add(Format ('PrinterCount=%d',[NumInfo]));<br> finally<br> &n bsp; <i>FreeMem(Buffer,
Count);</i><br> end;<br> Except<br> exit;<br> & nbsp;end;<br>end;</p>
Comment