PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → problème lors de l'appel d'une fonction d'une dll
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