AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Delphi mit gsdll32.dll benutzen (Ghostscript)
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi mit gsdll32.dll benutzen (Ghostscript)

Offene Frage von "Knollnase"
Ein Thema von FunkyGT · begonnen am 4. Nov 2009 · letzter Beitrag vom 23. Dez 2010
Antwort Antwort
FunkyGT

Registriert seit: 23. Jan 2004
16 Beiträge
 
Delphi 2005 Professional
 
#1

Delphi mit gsdll32.dll benutzen (Ghostscript)

  Alt 4. Nov 2009, 14:07
Hallo zusammen,

ich versuche gerade krampfhaft die die gsdll32.dll von ghostscript zu benutzen. und ich weiss nicht was ich falsch mache bzw. wo es denn hakt.

Hat jemand von euch sowas schon mal gemacht?

ich habe es dann nur mit der shell hinbekommen quasi die exe aufgerufen mit diversen parametern.

aber das reicht mir nicht, weil ich nur ein mässige fehlerbehandlung habe.

Ich habe mal das programm bzw. einen teil vom programm abgebildet

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   gs : Pgs_main_instance;
   code : integer;
   instance : Pointer;
   argv : PPChar;
begin
  new(instance);
  setlength(argv,11);
  code:=gsapi_new_instance(@instance,nil);
  if code<>0 then
    begin
      // Fehlerbehandlung
    end;
  try
    argv[0] := 'ps2pdf';
    argv[1] := '-dNOPAUSE';
    argv[2] := '-dBATCH';
    argv[3] := '-dSAFER';
    argv[4] := '-sDEVICE=pdfwrite';
    argv[5] := '-sOutputFile=Test.pdf';
    argv[6] := '-c';
    argv[7] := '.setpdfwrite';
    argv[8] := '-f';
    argv[9] := '-sPAPERSIZE=a4';
    argv[10] := '123.ps';

    code := gsapi_init_with_args(instance,length(argv),argv);
    if code<0 then
      raise Exception.Create('ERROR: init_args: '+IntToStr(code));
    gsapi_exit(gs);
    gsapi_delete_instance(gs);
  finally
  end;
end;
Falls jemand eine Idee hat, bzw. sowas schon mal realisiert hat, bitte hilfe

Stay tuned

Funky
  Mit Zitat antworten Zitat
Benutzerbild von MarcoWarm
MarcoWarm

Registriert seit: 10. Sep 2003
Ort: Großhennersdorf
532 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Delphi mit gsdll32.dll benutzen (Ghostscript)

  Alt 4. Nov 2009, 14:12
Hi,

Zitat von FunkyGT:
und ich weiss nicht was ich falsch mache bzw. wo es denn hakt.
wie zeigt es sich denn, daß du was falsch machst... wie hakt es denn? Gibt's eine Fehlermeldung etc?

Gruß
Marco
Marco Warm
TUO
TheUnknownOnes.net
  Mit Zitat antworten Zitat
FunkyGT

Registriert seit: 23. Jan 2004
16 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Delphi mit gsdll32.dll benutzen (Ghostscript)

  Alt 4. Nov 2009, 14:39
oh man .... stimmt ja, mit fehlermeldung wäre es einfacher ...sorry

ich bekommen den Errorcode -100 wenn ich

code := gsapi_init_with_args(instance,length(argv),argv); aufrufe bzw. die variable code hat den wert -100

die gsapi_new_instance hingegen funktioniert soweit

code:=gsapi_new_instance(@instance,nil); und bereitet keinen kummer.

Gruß Funky
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Delphi mit gsdll32.dll benutzen (Ghostscript)

  Alt 4. Nov 2009, 15:03
Hallo,

vielleicht stimmt ja etwas nicht mit der Übergabe der Instanz?
Hier gibt es einen ähnlichen Thread (allerdings in C)

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von MarcoWarm
MarcoWarm

Registriert seit: 10. Sep 2003
Ort: Großhennersdorf
532 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: Delphi mit gsdll32.dll benutzen (Ghostscript)

  Alt 4. Nov 2009, 15:10
Aaaaalso...
ganz genau könnte es dir sicher chaosben erklären. Aber der hat sich heut Urlaub genommen

Es könnte an dem Inhalt der übergebenen Args liegen. Aber genaueres kann ich dir leider nicht sagen.

Im Anhang liegt eine Wrapperklasse. Ich weiß nicht genau, ob die von chaosben stammt oder ob die jemand anderes "verbrochen" hat. Ich gehe mal davon aus, daß sie von ihm ist.

es sollte zumindest unter BDS2006 laufen. Ich denke nicht, daß die ganze Sache unicodetauglich ist... wer Spaß dran hat kann das Ganze ja auch weiterentwickeln.


Anzuwenden ist die Klasse so:
Delphi-Quellcode:
procedure TForm1.DoIt;
var
  Wrap : TGSWrapper;
  idx : INteger;
  Inst : TGSInstance;
begin

  ReportMemoryLeaksOnShutdown:=true;

  Wrap:=TGSWrapper.Create('M:\Runtime\GS\gs8.54\bin\gsdll32.dll');

  try
    inst:=Wrap.Instance;
    //Die folgenden Events sollten in TForm1 definiert sein.
    Inst.OnStdOut:=OnStdOut;
    Inst.OnStdErr:=OnStdErr;
    Inst.OnStdIn:=OnStdIn;
    inst.OnNewPage:=OnNewPage;

    cnt:=0;
    printer.BeginDoc;
    //aktuell steht in Memo1
    //-sDEVICE=display
    //-dNOPAUSE
    //-dDisplayFormat=198660
    //-r75
    //l:\project\software\test.pdf
    //zum drucken einer PDF
    Inst.InitWithArgs(Memo1.Lines);
    printer.EndDoc;
  finally
    Wrap.Free;
  end;
end;
Gruß
Marco
Angehängte Dateien
Dateityp: pas ugswrapper_201.pas (29,4 KB, 167x aufgerufen)
Marco Warm
TUO
TheUnknownOnes.net
  Mit Zitat antworten Zitat
Knollnase

Registriert seit: 23. Mär 2008
Ort: Dresden
2 Beiträge
 
#6

AW: Delphi mit gsdll32.dll benutzen (Ghostscript)

  Alt 23. Dez 2010, 15:46
Der oben gepostete Code ist in Ordnung, es scheitert wahrscheinlich eher an den Parametern.

Ich empfehle, einen stdout-Handler zu implementieren:
Delphi-Quellcode:
  function GSStdIn(ACaller: Pointer; ABuffer: PAnsiChar; ALen: Integer): Integer; stdcall;
  begin
    Result := StrLen(ABuffer);
  end;

  function GSStdOut(ACaller: Pointer; ABuffer: PAnsiChar; ALen: Integer): Integer; stdcall;
  var
    sBuffer : string;
    iChar : Integer;
  begin
    for iChar := 0 to ALen - 1 do
      sBuffer := sBuffer + ABuffer[iChar];

    sGSOutput := sGSOutput + sBuffer;
    Result := ALen;
  end;

...

  @gsapi_set_stdio := GetProcAddress(hDllInst, 'gsapi_set_stdio');
  if gsapi_set_stdio(instance, @GSStdIn, @GSStdOut, @GSStdOut) <> 0 then
    raise Exception.Create('Could not set stdio functions');
In der Variable sGSOutput werden so alle Ausgaben (z.B. Fehlermeldungen) von GhostScript gespeichert.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz