Einzelnen Beitrag anzeigen

bjoernga

Registriert seit: 26. Nov 2014
3 Beiträge
 
#8

AW: Funktion von PAnsiChar zu PWideChar ändern - wie?

  Alt 15. Dez 2014, 23:11
Ich bin mir inzwischen gar nicht mehr sicher, ob der Fehler wirklich in der obigen Prozedur (#1) liegt. Weil: wenn ich die Zeilen zwischen
Delphi-Quellcode:
      with DevNames^ do
      begin
      // wDriverOffset := (Longint(Offset) - Longint(DevNames)) div 2;
      // usw ...
      end;
auskommentiere, tritt der Fehler nicht auf. In der aufrufenden Funktion sieht das so aus:
Delphi-Quellcode:
function TPrinterSetupDialogW.Execute: Boolean;
var
  PrintDlgRec: TPrintDlgW;
  DevHandle: THandle;
begin
  FillChar(PrintDlgRec, SizeOf(PrintDlgRec), 0);
  with PrintDlgRec do
  begin
    lStructSize := SizeOf(PrintDlgRec);
    hInstance := SysInit.HInstance;
    GetPrinter(DevHandle, hDevNames); // <- Prozedur aus #1
    hDevMode := CopyData(DevHandle);
    Flags := PD_ENABLESETUPHOOK or PD_PRINTSETUP;
    lpfnSetupHook := DialogHook;
    hWndOwner := Application.Handle;
    Result := TaskModalDialog(@PrintDlgW, PrintDlgRec); // <- Es knallt, wenn diese Funktion zurückkommt
    if Result then
      SetPrinter(hDevMode, hDevNames)
    else begin
      if hDevMode <> 0 then GlobalFree(hDevMode);
      if hDevNames <> 0 then GlobalFree(hDevNames);
    end;
  end Ich
end;
Wenn ich mit F7/F8 durch den Code marschiere, gibts keine Exception, stattdessen ploppt das CPU-Fenster immer nach Result := TaskModalDialog() auf. Ich hab das mal als Screenshot angehängt, falls sich da jemand auskennt - für mich könnt da genausogut chinesisch drinstehen...

Möglicherweise kollidiert da irgendwas in den Tiefen der Ansi-VCL mit den Tnt-Controls: in TntForms und auch in TntDialogs werden ja die Windows Messages ganz schön umgebogen. Und der TPrinterSetupDialog klopft da ein Ansi-gekapseltes Fenster dazwischen - könnts das sein? (Oder andersrum: kann das gut gehen?)

Ich werd das ganze wohl anders angehen: aus C++ heraus direkt die Win-API-Funktion PrintDlgW() aufrufen, dann hätt ich mich am Problem vorbeigemogelt...

Falls aber doch noch jemand die Lösung findet, hätt ich natürlich nichts dagegen
Miniaturansicht angehängter Grafiken
screenshot-cpu-fenster.jpg  
  Mit Zitat antworten Zitat