I've been printing happily using my old printer (Panasonic KX-P6100 in
GDI mode), but it is quite old now and not printing too well. Therefore, I've purchased a new Lexmark E210 which works quite well in other applications (MS Word, Excel and various other applications including Smalltalk Express), but causes a GP fault with Dolphin. The following code fails on the "p startDoc" line when using the E210, but works fine on the Panasonic, can anyone help? Note: it also works fine on a HP930C. " ============== test a printer =================" f:= Font name: 'Arial' pointSize:20. p:= PrinterCanvas choose. p startDoc. p startPage. p font: f; text: 'Hallo test printer' at: 200@200. (OLEPicture fromFile: 'c:\my documents\data\tpro\forms\podage4w.bmp') drawOn: p at: 30@30 extent: 100@100. p endPage. p endDoc. "=================end test=========================" "====================wallback======================" Contents of wallback variables: exceptionRecordBytes #[5 0 0 192 0 0 0 0 0 0 0 0 1 37 172 7 2 0 0 0 0 0 0 0 255 255 255 255 31 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 112 18 255 255 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 44 249 211 0] exceptionRecord an EXCEPTION_RECORD(ExceptionCode=3221225477 ExceptionFlags=0 ExceptionAddress=an ExternalAddress(16r7AC2501) NumberParameters=2 ExceptionInformation= a DWORDArray(0 4294967295 65567 0 0 0 0 0 0 4294906480 4294901760 4294967295 0 0 13891884)) Copy of wallback data: =====================start data============================== 07:37:44, Friday, 30 August 2002: 'Invalid access to memory location. Reading 0xFFFFFFFF, IP 0x7AC2501 (C:\WINDOWS\SYSTEM\SSGS3UM.DLL)' ProcessorScheduler>>gpFault: [] in ProcessorScheduler>>vmi:list:no:with: BlockClosure>>ifCurtailed: ProcessorScheduler>>vmi:list:no:with: GDILibrary(ExternalLibrary)>>invalidCall GDILibrary>>startDoc:lpdi: PrinterCanvas>>startDoc UndefinedObject>>{unbound}doIt CompiledExpression>>value: SmalltalkWorkspace>>evaluateRange:ifFail:debug: SmalltalkWorkspace>>evaluateItIfFail:debug: SmalltalkWorkspace>>evaluateItIfFail: SmalltalkWorkspace>>evaluateIt Symbol>& gt;forwardTo: CommandDescription>>performAgainst: [] in Command>>value BlockClosure>>ifCurtailed: BlockClosure>>ensure: Command>>value ShellView>>performCommand: SmalltalkWorkspaceDocument(Shell)>>performCommand: CommandQuery>>perform DelegatingCommandPolicy(CommandPolicy)>>route: [] in ShellView(View)>>onCommand: BlockClosure>>ifCurtailed: BlockClosure>>ensure: Cursor>>showWhile: ShellView(View)>>onCommand: ShellView(View)>>wmCommand:wParam:lParam: ShellView(View)>>dispatchMessage:wParam:lParam: [] in InputState>>wndProc:message:wParam:lParam:cookie: BlockClosure>>ifCurtailed: ProcessorScheduler>>callback:evaluate: InputState>>wndProc:message:wParam:lParam:cookie: ShellView>>translateAccelerator: ShellView>>preTranslateKeyboardInput: ShellView(View)>>preTranslateMessage:< br>InputState>>preTranslateMessage: InputState>>pumpMessage: InputState>>loopWhile: InputState>>mainLoop [] in InputState>>forkMain ExceptionHandler(ExceptionHandlerAbstract)>>markAndTry [] in ExceptionHandler(ExceptionHandlerAbstract)>>try: BlockClosure>>ifCurtailed: BlockClosure>>ensure: ExceptionHandler(ExceptionHandlerAbstract)>>try: BlockClosure>>on:do: [] in BlockClosure>>newProcess =====================end data/wallback================= Thanks, Theo Pronk ================================ [hidden email] TPRO Consulting Pty Ltd ================================ |
Theo,
> The following code fails on the "p startDoc" line when using the E210, > but works fine on the Panasonic, can anyone help? This is just a vague possibility but I had an Epson printer that failed (I can't remember if it gpf'd or just refused to print) if it wasn't given a document name. I had to add the following method and use this, with any String, as a replacement for #startDoc. PrinterCanvas>>startDocNamed: aString GDILibrary default startDoc: self asParameter lpdi: ((DOCINFO new) lpszDocName: aString; yourself) Worth a try anyway.... Regards Ian |
Hi Ian,
As unbelievable as it may seem the #startDocNamed: method has solved the problem! Now I can print "no problems" to the Lexmark printer! When vague problems like this occur it's great to be able to rely on those individual that have taken the time to dissect and analyse problems like this. Thanks heaps... Theo Pronk ========================================= Ian Bartholomew wrote: > Theo, > > >>The following code fails on the "p startDoc" line when using the E210, >>but works fine on the Panasonic, can anyone help? > > This is just a vague possibility but I had an Epson printer that failed (I > can't remember if it gpf'd or just refused to print) if it wasn't given a > document name. I had to add the following method and use this, with any > String, as a replacement for #startDoc. > > PrinterCanvas>>startDocNamed: aString > GDILibrary default > startDoc: self asParameter > lpdi: ((DOCINFO new) > lpszDocName: aString; > yourself) > > Worth a try anyway.... > > Regards > Ian > > > > > |
Theo,
> As unbelievable as it may seem the #startDocNamed: method has solved the > problem! Now I can print "no problems" to the Lexmark printer! I'm glad that it solved your problem. On further reflection though I think that (shock, horror!) it's a bug in Dolphin. Normally the api documentation for a parameter that can, for example, be either a pointer to a string or null to indicate a default always tells you what the null value signifies. In this case DOCINFO doesn't mention what happens if null is passed as #lpszDocName and, because of that, I would assume that the documentation is saying that you *must* always pass a String. The fact that most printer drivers will check for null values doesn't really matter if there are some that, legitimately, will not. Andy/Blair. It look to me like Dolphin should implement #startDocNamed: (or whatever) and that #startDoc should then use that, passing a default String argument. Regards Ian |
Ian,
> > As unbelievable as it may seem the #startDocNamed: method has solved the > > problem! Now I can print "no problems" to the Lexmark printer! > > I'm glad that it solved your problem. > > On further reflection though I think that (shock, horror!) it's a bug in > Dolphin. Normally the api documentation for a parameter that can, for > example, be either a pointer to a string or null to indicate a default > always tells you what the null value signifies. In this case DOCINFO doesn't > mention what happens if null is passed as #lpszDocName and, because of that, > I would assume that the documentation is saying that you *must* always pass > a String. The fact that most printer drivers will check for null values > doesn't really matter if there are some that, legitimately, will not. > > Andy/Blair. It look to me like Dolphin should implement #startDocNamed: (or > whatever) and that #startDoc should then use that, passing a default String > argument. This has been recorded as #1045: "GP fault when printing to some printers" and this should be addressed in the next patch release. Best Regards, Andy Bower Dolphin Support http://www.object-arts.com --- Are you trying too hard? http://www.object-arts.com/Relax.htm --- |
Free forum by Nabble | Edit this page |