|
Utilisation d'une DLL Ghostscript en WD25 |
Débuté par Worm, 01 oct. 2020 15:21 - 5 réponses |
| |
| | | |
|
| |
Posté le 01 octobre 2020 - 15:21 |
Bonjour,
Ayant besoin (entre autre) de transformer des .ps en .pdf j'essaye d'utiliser le fonctionnement d'appel de DLL. Certes je pourrai aussi faire appel à un LanceAppli avec cmd pour exécuter une commande dos, mais ce n'est pas mon souhait ...
Sur un exemple basique ( https://doc.pcsoft.fr/fr-FR/?3014006 ) d’utilisation d'une DLL
(Pour faire au plus simple, je ne fais qu'un appel a la fonction gsdll_revision qui avec un "Null" renvoi toutes les infos de la version du Ghostscript )
J'adapte celui-ci ainsi :
hInst est un entier hInst = ChargeDLL("C:\gs\gs9.53.3\bin\gsdll32.DLL") SI hInst = 0 ALORS Erreur(ErreurInfo()) SINON Info("DLL chargée") AppelDLL32("gsdll32.DLL", "gsdll_revision", Null) AppelDLL32("gsdll32.DLL", "gsdll_init", Null) DéchargeDLL(hInst) FIN
Mais voila, j'ai l'erreur, ci dessous.
La fonction 'gsdll_revision' de la DLL 'gsdll32.DLL' a provoqué une erreur d'exécution.
Pile des appels : Clic sur Bouton2 (home.Bouton2), ligne 8
La fonction 'gsdll_revision' de la DLL 'gsdll32.DLL' a provoqué une erreur d'exécution.
Pile des appels : Clic sur Bouton2 (home.Bouton2), ligne 8
Date : 01/10/2020 14:39:20 Projet : GS_DLL
Informations supplémentaires : Code erreur : 2805 Module : 'wd250vm.dll (01F250089f - 25.0.480.3) Informations de débogage :
Details techniques :
Module : gsdll32.DLL Adresse de base : 04F20000 Erreur systeme : Access violation (GPF) EIP = 04F211DC OS : Windows 7 Service Pack 1(6.1.7601) Registres :
EIP = 04F211DC EBP = 003CD670 EAX = 0568B170 EBX = 009E8600 ECX = EF82EF82 EDX = 00000000 ESI = 00000000 EDI = 003CDB90
Pile des appels :
[gsdll32.DLL (04F20000)] 04F211C0 : gsdll_revision() + 28 bytes
Fonction (0,18) EIT_TYPE_WDFILE : <2> EIT_IDCODE : <18>
J'avoue ne pas trop comprendre cette erreur " Access violation (GPF) " malgré différente recherche ... A toute fin utile, la DLL est bien chargée et la fonction est bien lu par l'AppelDLL32.
Merci a tous ceux qui pourrons m'aiguiller. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 945 messages Popularité : +102 (110 votes) |
|
Posté le 01 octobre 2020 - 16:18 |
Bonjour d'après la documentation gsapi_revision attend 2 paramètres un pointeur sur une structure t sa taille
st_gsapi_revision_s est une structure product est un entier système copyright est un entier système revision est un entier système revisiondate est un entier système END gsapi_revision_s est une st_gsapi_revision_s AppelDLL32("gsdll32.DLL", "gsdll_revision", &gsapi_revision_s, Dimension(gsapi_revision_s) :
-- «Nos clients sont nos meilleurs beta testeur.» H. Mintzberg «Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 945 messages Popularité : +102 (110 votes) |
|
Posté le 01 octobre 2020 - 17:46 |
désolé j'ai pris la mauvaise doc
DllName est une chaîne = "D:\Program Files\gs\gs9.53.3\bin\gsdll64.dll"
product est un entier système = 0 copyright est un entier système = 0 revision est un entier système = 0 revisiondate est un entier système = 0
IF ChargeDLL(DllName) THEN API(DllName, "gsdll_revision", &product, ©right, &revision, &revisiondate) Trace(ChaîneRécupère(product, crAdresseASCIIZ)) Trace(ChaîneRécupère(copyright, crAdresseASCIIZ)) ELSE STOP END
-- «Nos clients sont nos meilleurs beta testeur.» H. Mintzberg «Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 945 messages Popularité : +102 (110 votes) |
|
Posté le 01 octobre 2020 - 20:36 |
Bonsoir code un peut plus complet
DllName est une chaîne = "D:\Program Files\gs\gs9.53.3\bin\gsdll64.dll" hndDLL est un entier système product est un entier système = 0 copyright est un entier système = 0 revision est un entier système = 0 revisiondate est un entier système = 0 args est un tableau dynamiquedynamique de 0 chaînes argi est un tableau dynamiquedynamique de entiers systèmeme code est un entier = -100 command est une chaîne
hndDLL = ChargeDLL(DllName) IF hndDLL > 0 THEN API(DllName, "gsdll_revision", &product, ©right, &revision, &revisiondate) Trace(ChaîneRécupère(product, crAdresseASCIIZ)) Trace(ChaîneRécupère(copyright, crAdresseASCIIZ)) Trace(revision) Trace(DateVersChaîne(NumériqueVersChaîne(revisiondate),"jj/mm/aaaa")) Dimension(args, 10) args[1] = "gswin64c.exe" args[2] = "-q" args[3] = "-P-" args[4] = "-dSAFER" args[5] = "-dNOPAUSE" args[6] = "-dBATCH" args[7] = "-sDEVICE#pdfwrite" args[8] = "-dCompatibilityLevel#1.4" args[9] = "-sOutputFile#d:\temp\alphabet.pdf" args[10] = "d:\temp\alphabet.ps" Dimension(argi, 10) argi[1] = &args[1] argi[2] = &args[2] argi[3] = &args[3] argi[4] = &args[4] argi[5] = &args[5] argi[6] = &args[6] argi[7] = &args[7] argi[8] = &args[8] argi[9] = &args[9] argi[10] = &args[10] code = API(DllName, "gsdll_init", &gsdll_callback, Handle(FenEnCours()), 10, &argi) IF code = 0 THEN API(DllName, "gsdll_execute_begin") command = "gsave" + CRLF code = API(DllName, "gsdll_execute_cont", &command, Taille(command)) Trace(code) API(DllName, "gsdll_execute_end") API(DllName, "gsdll_exit") ELSE IF code = -100 THEN Info("bad code"+TAB+code) API(DllName, "gsdll_exit") ELSE Info("bad code"+TAB+code) END END DéchargeDLL(hndDLL) ELSE STOP END
-- «Nos clients sont nos meilleurs beta testeur.» H. Mintzberg «Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 945 messages Popularité : +102 (110 votes) |
|
Posté le 06 octobre 2020 - 15:41 |
bonjour petite simplification du code
arguments = "gswin64c.exe;-q;-P-;-dSAFER;-dNOPAUSE;-dBATCH;-sDEVICE#pdfwrite;-dCompatibilityLevel#1.4;-sOutputFile#d:\temp\alphabet.pdf;d:\temp\alphabet.ps" Dimension(args, ChaîneOccurrence(arguments,";")+1) ChaîneVersTableau(arguments, args, ";") Dimension(argi, Dimension(args)) FOR i=1 _TO_ Dimension(args) argi[i] = &args[i] END
a la place de
Dimension(args, 10) args[1] = "gswin64c.exe" args[2] = "-q" args[3] = "-P-" args[4] = "-dSAFER" args[5] = "-dNOPAUSE" args[6] = "-dBATCH" args[7] = "-sDEVICE#pdfwrite" args[8] = "-dCompatibilityLevel#1.4" args[9] = "-sOutputFile#d:\temp\alphabet.pdf" args[10] = "d:\temp\alphabet.ps"
Dimension(argi, 10) argi[1] = &args[1] argi[2] = &args[2] argi[3] = &args[3] argi[4] = &args[4] argi[5] = &args[5] argi[6] = &args[6] argi[7] = &args[7] argi[8] = &args[8] argi[9] = &args[9] argi[10] = &args[10]
-- «Nos clients sont nos meilleurs beta testeur.» H. Mintzberg «Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 945 messages Popularité : +102 (110 votes) |
|
Posté le 29 octobre 2020 - 20:57 |
pas de retour ?
-- «Nos clients sont nos meilleurs beta testeur.» H. Mintzberg «Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer |
| |
| |
| | | |
|
| | | | |
| | |
|