|
problème lors de l'appel d'une fonction d'une dll |
Started by p.michel, Mar., 01 2006 2:47 PM - 12 replies |
| |
| | | |
|
| |
Posted on March, 01 2006 - 2:47 PM |
Bonjour.
J'ai un problème avec un appel de fonction dll avec AppelDll32. la dll utilisée est téléchargeable à cette adresse : http://www.sautinsoft.com/components/htmltortf_pro_dll.zip, elle permet de convertir un fichier ou chaine au format html vers rtf
lors de l'appel il faut passer en paramètre à cette dll une structure assez importante (quasiment que des int et quelques tableaux de char).
A chaque fois j'ai une erreur lors de l'appel à AppelDll32 :
Types incompatibles durant une affectation.
le paramètre incriminé étant biensur la variable de la structure.
concernant les int, je sais que l'on peut les remplacer par des entiers normaux en Windev. concernant les tableaux de char (char[]), j'utilise "HtmlPath est une chaîne sur 650" en traduction de "char HtmlPath[650]".
Voila si quelqu'un a deja utilisé cette dll ou a une idée à tester je suis preneur
merci d'avance
Philippe MICHEL |
| |
| |
| | | |
|
| | |
| |
Posted on March, 01 2006 - 3:33 PM |
détaille la structure éventuellement ?
"int" -> "entier sur 4" en WD
bon courage ! eric l.
Philippe MICHEL a écrit :
Bonjour. J'ai un problème avec un appel de fonction dll avec AppelDll32. la dll utilisée est téléchargeable à cette adresse : http://www.sautinsoft.com/components/htmltortf_pro_dll.zip, elle permet de convertir un fichier ou chaine au format html vers rtf lors de l'appel il faut passer en paramètre à cette dll une structure assez importante (quasiment que des int et quelques tableaux de char). A chaque fois j'ai une erreur lors de l'appel à AppelDll32 : Types incompatibles durant une affectation. le paramètre incriminé étant biensur la variable de la structure. concernant les int, je sais que l'on peut les remplacer par des entiers normaux en Windev. concernant les tableaux de char (char[]), j'utilise "HtmlPath est une chaîne sur 650" en traduction de "char HtmlPath[650]". Voila si quelqu'un a deja utilisé cette dll ou a une idée à tester je suis preneur merci d'avance Philippe MICHEL |
| |
| |
| | | |
|
| | |
| |
Posted on March, 01 2006 - 4:27 PM |
ok voici la structure que j'utilise :
Set est une structure PreserveTables , PreserveImages , PreserveHyperlinks , PreserveFontFace , PreserveFontSize sont des entiers PreserveFontColor , PreserveBackgroundColor , PreserveAlignment , PreserveTableWidth , PreserveNestedTables , PageMarginLeft sont des entiers PageMarginRight , PageMarginTop , PageMarginBottom , BorderVisibility , PageOrientation , PageSize , FontFace , FontSize , PageAlignment sont des entiers RtfLanguage , Encoding , OutputTextFormat , PreservePageBreaks , ImageCompatible , PageNumbers sont des entiers PageHeader, PageFooter sont des chaînes fixe sur 150 HtmlPath est une chaîne fixe sur 650 PageNumbersAlignV , PageNumbersAlignH , PreserveHR sont des entiers FIN
voila j'ai fait 2/3 essais, pour les int je pense que ça correspond, pour les chaines windev offre différents choix pour mettre une longueur fixe. |
| |
| |
| | | |
|
| | |
| |
Posted on March, 01 2006 - 5:24 PM |
Je parlais de la structure en C
Sinon pour etre sûr, un
"char MaChaine[100]" équivaut à "MaChaine est tableau de 100 entier sans signe sur 1"
Je pense que ton code est en windev (et pas en windev mobile) mais sinon il faut faire attention à l'unicode...
bon courage
eric l.
Philippe MICHEL a écrit :
ok voici la structure que j'utilise :
Set est une structure PreserveTables , PreserveImages , PreserveHyperlinks , PreserveFontFace , PreserveFontSize sont des entiers PreserveFontColor , PreserveBackgroundColor , PreserveAlignment , PreserveTableWidth , PreserveNestedTables , PageMarginLeft sont des entiers PageMarginRight , PageMarginTop , PageMarginBottom , BorderVisibility , PageOrientation , PageSize , FontFace , FontSize , PageAlignment sont des entiers RtfLanguage , Encoding , OutputTextFormat , PreservePageBreaks , ImageCompatible , PageNumbers sont des entiers PageHeader, PageFooter sont des chaînes fixe sur 150 HtmlPath est une chaîne fixe sur 650 PageNumbersAlignV , PageNumbersAlignH , PreserveHR sont des entiers FIN
voila j'ai fait 2/3 essais, pour les int je pense que ça correspond, pour les chaines windev offre différents choix pour mettre une longueur fixe.
|
| |
| |
| | | |
|
| | |
| |
Posted on March, 01 2006 - 6:56 PM |
dsl voici la structure en c :
struct ConvertSettings { int PreserveTables; int PreserveImages; int PreserveHyperlinks; int PreserveFontFace; int PreserveFontSize; int PreserveFontColor; int PreserveBackgroundColor; int PreserveAlignment; int PreserveTableWidth; int PreserveNestedTables; int PageMarginLeft; int PageMarginRight; int PageMarginTop; int PageMarginBottom; int BorderVisibility; int PageOrientation; int PageSize; int FontFace; int FontSize; int PageAlignment; int RtfLanguage; int Encoding; int OutputTextFormat; int PreservePageBreaks; int ImageCompatible; int PageNumbers; char PageHeader[150]; char PageFooter[150]; char HtmlPath[650]; int PageNumbersAlignV; int PageNumbersAlignH; int PreserveHR; };
comme tu peux le voir il n'y a que des int mis à part les 3 char[] |
| |
| |
| | | |
|
| | |
| |
Posted on March, 02 2006 - 6:41 AM |
Salut,
montre nous l'appel qui cause une erreur
Mathieu |
| |
| |
| | | |
|
| | |
| |
Posted on March, 02 2006 - 11:10 AM |
voila l'ensemble du code de l'appel..........
dllInst est un entier str est une chaîne rtfC est une chaîne htm est une chaîne res est un entier
// Paramètres de la fonction Set est une structure PreserveTables , PreserveImages , PreserveHyperlinks , PreserveFontFace , PreserveFontSize sont des entiers PreserveFontColor , PreserveBackgroundColor , PreserveAlignment , PreserveTableWidth , PreserveNestedTables , PageMarginLeft sont des entiers PageMarginRight , PageMarginTop , PageMarginBottom , BorderVisibility , PageOrientation , PageSize , FontFace , FontSize , PageAlignment sont des entiers RtfLanguage , Encoding , OutputTextFormat , PreservePageBreaks , ImageCompatible , PageNumbers sont des entiers PageHeader, PageFooter sont des chaînes fixe sur 150 HtmlPath est une chaîne fixe sur 650 PageNumbersAlignV , PageNumbersAlignH , PreserveHR sont des entiers FIN
Settings est une Set
Settings:PreserveTables = 1 Settings:PreserveImages = 1 Settings:PreserveHyperlinks = 0 Settings:PreserveFontFace = 1 Settings:PreserveFontSize = 1 Settings:PreserveFontColor = 1 Settings:PreserveBackgroundColor = 1 Settings:PreserveAlignment = 1 Settings:PreserveTableWidth = 1 Settings:PreserveNestedTables = 1 Settings:PageMarginLeft = 20 Settings:PageMarginRight = 25 Settings:PageMarginTop = 20 Settings:PageMarginBottom = 20 Settings:BorderVisibility = Hidden Settings:PageOrientation = 0 Settings:PageSize = 0 Settings:FontFace = 0 Settings:FontSize = 10 Settings:PageAlignment = 0 Settings:RtfLanguage = 1033 Settings:Encoding = 0 Settings:OutputTextFormat = Rtf Settings:PreservePageBreaks = 1 Settings:ImageCompatible = 0 //type of produced images: Word - 0, WordPad - 1 Settings:PageNumbers = 0 Settings:PageHeader = " " Settings:PageFooter = "My footer line1\\par My footer line2" Settings:HtmlPath = " " Settings:PageNumbersAlignV = 5 Settings:PageNumbersAlignH = 2 Settings:PreserveHR = 1 ////////////////////////////
//CodeRtf1 = HTML2RTF.Convert(codeRtf) dllInst = ChargeDLL("O:\Devel\Webdev\TestEditeurTexte\dll\htmltortf_sautinsoft.dll")
htm = codeRTF res = AppelDLL32("htmltortf_sautinsoft","htmltortf_string", &htm , res , Settings)
str = ChaîneRécupère(res,crAdresseASCIIZ)
codeRTF1 = str
DéchargeDLL(dllInst) |
| |
| |
| | | |
|
| | |
| |
Posted on March, 02 2006 - 11:50 AM |
Donc la structure en WD serait (en tout logique) :
SConvertSettings est structure PreserveTables est entier sans signe sur 4 PreserveImages est entier sans signe sur 4 PreserveHyperlinks est entier sans signe sur 4 PreserveFontFace est entier sans signe sur 4 PreserveFontSize est entier sans signe sur 4 PreserveFontColor est entier sans signe sur 4 PreserveBackgroundColor est entier sans signe sur 4 PreserveAlignment est entier sans signe sur 4 PreserveTableWidth est entier sans signe sur 4 PreserveNestedTables est entier sans signe sur 4 PageMarginLeft est entier sans signe sur 4 PageMarginRight est entier sans signe sur 4 PageMarginTop est entier sans signe sur 4 PageMarginBottom est entier sans signe sur 4 BorderVisibility est entier sans signe sur 4 PageOrientation est entier sans signe sur 4 PageSize est entier sans signe sur 4 FontFace est entier sans signe sur 4 FontSize est entier sans signe sur 4 PageAlignment est entier sans signe sur 4 RtfLanguage est entier sans signe sur 4 Encoding est entier sans signe sur 4 OutputTextFormat est entier sans signe sur 4 PreservePageBreaks est entier sans signe sur 4 ImageCompatible est entier sans signe sur 4 PageNumbers est entier sans signe sur 4 sfPageHeader est chaîne fixe sur 150 sfPageFooter est chaîne fixe sur 150 sfHtmlPath est chaîne fixe sur 650 PageNumbersAlignV est entier sans signe sur 4 PageNumbersAlignH est entier sans signe sur 4 PreserveHR est entier sans signe sur 4 fin
Mais...
Un "dimension(...)" en windev de cette structure donne 1066
Un "sizeof(...)" en C de ta structure originale donne 1068
Le C aime bien les multiples de 4 et rajoute donc dans ce cas deux octets à la fin de la structure...
Rajoute peut etre un "Dummy est entier sans signe sur 2" à la fin (tres important à la fin) de ta structure en windev...
Pour voir ! Je suis peut etre à côté de la plaque...
Bon courage eric l.
Philippe MICHEL a écrit :
dsl voici la structure en c :
struct ConvertSettings { int PreserveTables; int PreserveImages; int PreserveHyperlinks; int PreserveFontFace; int PreserveFontSize; int PreserveFontColor; int PreserveBackgroundColor; int PreserveAlignment; int PreserveTableWidth; int PreserveNestedTables; int PageMarginLeft; int PageMarginRight; int PageMarginTop; int PageMarginBottom; int BorderVisibility; int PageOrientation; int PageSize; int FontFace; int FontSize; int PageAlignment; int RtfLanguage; int Encoding; int OutputTextFormat; int PreservePageBreaks; int ImageCompatible; int PageNumbers; char PageHeader[150]; char PageFooter[150]; char HtmlPath[650]; int PageNumbersAlignV; int PageNumbersAlignH; int PreserveHR; };
comme tu peux le voir il n'y a que des int mis à part les 3 char[]
|
| |
| |
| | | |
|
| | |
| |
Posted on March, 02 2006 - 11:51 AM |
il ne manquerait pas un "&" avant "Settings" lors de l'appel à "AppelDll32" ?
eric l.
Philippe MICHEL a écrit :
voila l'ensemble du code de l'appel..........
dllInst est un entier str est une chaîne rtfC est une chaîne htm est une chaîne res est un entier
// Paramètres de la fonction Set est une structure PreserveTables , PreserveImages , PreserveHyperlinks , PreserveFontFace , PreserveFontSize sont des entiers PreserveFontColor , PreserveBackgroundColor , PreserveAlignment , PreserveTableWidth , PreserveNestedTables , PageMarginLeft sont des entiers PageMarginRight , PageMarginTop , PageMarginBottom , BorderVisibility , PageOrientation , PageSize , FontFace , FontSize , PageAlignment sont des entiers RtfLanguage , Encoding , OutputTextFormat , PreservePageBreaks , ImageCompatible , PageNumbers sont des entiers PageHeader, PageFooter sont des chaînes fixe sur 150 HtmlPath est une chaîne fixe sur 650 PageNumbersAlignV , PageNumbersAlignH , PreserveHR sont des entiers FIN
Settings est une Set
Settings:PreserveTables = 1 Settings:PreserveImages = 1 Settings:PreserveHyperlinks = 0 Settings:PreserveFontFace = 1 Settings:PreserveFontSize = 1 Settings:PreserveFontColor = 1 Settings:PreserveBackgroundColor = 1 Settings:PreserveAlignment = 1 Settings:PreserveTableWidth = 1 Settings:PreserveNestedTables = 1 Settings:PageMarginLeft = 20 Settings:PageMarginRight = 25 Settings:PageMarginTop = 20 Settings:PageMarginBottom = 20 Settings:BorderVisibility = Hidden Settings:PageOrientation = 0 Settings:PageSize = 0 Settings:FontFace = 0 Settings:FontSize = 10 Settings:PageAlignment = 0 Settings:RtfLanguage = 1033 Settings:Encoding = 0 Settings:OutputTextFormat = Rtf Settings:PreservePageBreaks = 1 Settings:ImageCompatible = 0 //type of produced images: Word - 0, WordPad - 1 Settings:PageNumbers = 0 Settings:PageHeader = " " Settings:PageFooter = "My footer line1\\par My footer line2" Settings:HtmlPath = " " Settings:PageNumbersAlignV = 5 Settings:PageNumbersAlignH = 2 Settings:PreserveHR = 1 ////////////////////////////
//CodeRtf1 = HTML2RTF.Convert(codeRtf) dllInst = ChargeDLL("O:\Devel\Webdev\TestEditeurTexte\dll\htmltortf_sautinsoft.dll")
htm = codeRTF res = AppelDLL32("htmltortf_sautinsoft","htmltortf_string", &htm , res , Settings)
str = ChaîneRécupère(res,crAdresseASCIIZ)
codeRTF1 = str
DéchargeDLL(dllInst)
|
| |
| |
| | | |
|
| | |
| |
Posted on March, 02 2006 - 12:17 PM |
j'ai essayé de passer la structure en référence (&) mais ça change rien à l'erreur |
| |
| |
| | | |
|
| | |
| |
Posted on March, 02 2006 - 12:44 PM |
Merci de ta réponse, j'ai testé avec ta structure et le dummy entier sur 2 octets. La fonction dimension renvoie bien 1068 mais l'erreur générée est toujours la même. J'ai essayé de passer la référence à ma variable de type structure ( avec le & ) mais dans ce cas là la dll renvoie une ligne de code rtf qui correspond à un fichier rtf vide.
Je vais continuer à tester mais je ne m'attendais pas à galérer comme çà pour un simple appel à une dll........ |
| |
| |
| | | |
|
| | |
| |
Posted on March, 02 2006 - 5:05 PM |
Bon, vla du code qui fonctionne, naturlish, il faut modifier les noms du fichier HTML
// Paramètres de la fonction Set est une structure PreserveTables , PreserveImages , PreserveHyperlinks , PreserveFontFace , PreserveFontSize sont des entiers PreserveFontColor , PreserveBackgroundColor , PreserveAlignment , PreserveTableWidth , PreserveNestedTables , PageMarginLeft sont des entiers PageMarginRight , PageMarginTop , PageMarginBottom , BorderVisibility , PageOrientation , PageSize , FontFace , FontSize , PageAlignment sont des entiers RtfLanguage , Encoding , OutputTextFormat , PreservePageBreaks , ImageCompatible , PageNumbers sont des entiers PageHeader, PageFooter sont des chaînes fixe sur 150 HtmlPath est une chaîne fixe sur 650 PageNumbersAlignV , PageNumbersAlignH , PreserveHR sont des entiers END
CS est un Set
CS:PreserveTables = 1 CS:PreserveImages = 1 CS:PreserveHyperlinks = 0 CS:PreserveFontFace = 1 CS:PreserveFontSize = 1 CS:PreserveFontColor = 1 CS:PreserveBackgroundColor = 1 CS:PreserveAlignment = 1 CS:PreserveTableWidth = 1 CS:PreserveNestedTables = 1 CS:PageMarginLeft = 20 CS:PageMarginRight = 25 CS:PageMarginTop = 20 CS:PageMarginBottom = 20 CS:BorderVisibility = 0 // Hidden=0 CS:PageOrientation = 0 CS:PageSize = 0 CS:FontFace = 0 CS:FontSize = 10 CS:PageAlignment = 0 CS:RtfLanguage = 1033 CS:Encoding = 0 CS:OutputTextFormat = 0 //Rtf=0 CS:PreservePageBreaks = 1 CS:ImageCompatible = 0 //type of produced images: Word - 0, WordPad - 1 CS:PageNumbers = 0 CS:PageHeader = " " CS:PageFooter = "My footer line1\\par My footer line2" CS:HtmlPath = " " CS:PageNumbersAlignV = 5 CS:PageNumbersAlignH = 2 CS:PreserveHR = 1
dllNAME est une chaîne = "htmltortf_sautinsoft.dll" dllInst est un entier dllInst = ChargeDLL("E:\HTML\HTML-to-RTF Pro DLL - Win32\" + dllNAME) IF dllInst = 0 THEN Erreur("Chargement de la dll impossible...") RETOUR END
strHTML est une chaîne ASCIIZ sur 10240 = fChargeTexte("E:\HTML\HTML-to-RTF Pro DLL - Win32\Google.htm") IF strHTML = "" THEN RETOUR
strRTF est une chaîne ASCIIZ sur 10240 = "" Res est un entier WHEN EXCEPTION IN Res = AppelDLL32(dllNAME, "htmltortf_string", &strHTML , &strRTF , &CS) DO Erreur("BUG....") DéchargeDLL(dllInst) RETOUR END
WHEN EXCEPTION IN strRTF = ChaîneRécupère(Res,crAdresseASCIIZ) DO Erreur("BUG....") DéchargeDLL(dllInst) RETOUR END
fSauveTexte("E:\HTML\HTML-to-RTF Pro DLL - Win32\Google.rtf",strRTF)
DéchargeDLL(dllInst) |
| |
| |
| | | |
|
| | |
| |
Posted on April, 11 2006 - 11:25 PM |
Bonjour
j'ai vu votre code contenant les appels aux dll et il fonctionne effectivement très bien avec la dll "htmtortf_sautinsoft.dll"...Par contre j'ai un petit problème, j'ai voulu acheter la version pro (Html2Rtf.dll téléchargeable sur le lien suivant: http://www.sautinsoft.com/components/htmltortf_pro_com.exe), en pensant qu'elle avait simplement plus de fonctionnalité, mais du coup le code ci dessous n'est plus du tout fonctionnel...
le "plantage" s'effectue à la ligne suivante :
WHEN EXCEPTION IN Res = AppelDLL32(dllNAME, "htmltortf_string", &strHTML , &strRTF , &CS) DO Erreur("BUG....") DéchargeDLL(dllInst) RETOUR END
res = 0 et du coup je ne sais pas quoi faire...je sais que je suis carrément novice dans l'utilisation des dll et un coup de main de votre part serait fort appréciable
Merci de m'avoir lu
David |
| |
| |
| | | |
|
| | | | |
| | |
|