Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 11 Juil 2012 - 3:46 | |
| j'essaye mais y'a un truc voies tu quelque chose d'incorrect dans ce code freebasic : - Code:
-
Public Function Recup(ByRef result As String) As Integer Export Dim a As String= "Bonjour " Dim b As String= "le " Dim c As String= "monde" Dim resultat As String resultat= a + b + c result=resultat Return 0 End Function
puis pour recuperer en panoramic : - Code:
-
dim i%,result$
dll_on " Ma dll.dll" i%=dll_call1(adr(result$)) print result$ dll_off à la compilation, la dll passe mais après panoramic me dit que ce n'est pas opération arithmétique valide. | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Ma 1ère DLL Mer 11 Juil 2012 - 8:51 | |
| Dans ta fonction, ce ne serait pas plutôt "return result" au lieu de "return 0" ? | |
|
jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Ma 1ère DLL Mer 11 Juil 2012 - 9:31 | |
| Bon début, mais il y a quelques erreurs ... - Code:
-
extern "Windows-MS" : ' Indispensable !
function Recup(ByRef result As zstring ptr) As Integer Export ' les chaines de caracteres sont passees sous forme de pointeurs ' sur des chaines a zero terminal, soit "zstring ptr" en FreeBASIC Dim a As String= "Bonjour " Dim b As String= "le " Dim c As String= "monde" Dim resultat As String resultat= a + b + c *result=resultat ' L'etoile est necessaire car result est un pointeur Return 0 End Function
end extern : 'Indispensable aussi !
J'ai sauvegardé sous string1.bas car je n'étais pas sûr qu'on puisse inclure des espaces dans les noms de fichiers ! Appel en panoramic : - Code:
-
dim i%,result$
' La chaine retournee par la fonction de DLL ' doit etre dimensionnee a une longueur suffisante
result$ = string$(30, " ")
dll_on "string1.dll"
' Le nom de la fonction doit etre le 1er parametre de dll_call i% = dll_call1("Recup", adr(result$))
print result$ dll_off
Pour plus de précisions, voir mon tutoriel : http://www.unilim.fr/pages_perso/jean.debord/panoramic/dll/panoramic_dll.htm | |
|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 11 Juil 2012 - 12:53 | |
| @ Klaus et Jean debord Merci pour ces explications et la correction. je vous dois une petite explication sur le pourquoi. Dans je voulais faire evoluer mon appli GDF.Suez vers un multi fournisseur sauf que les calculs sont pas toujours les mêmes de l'un à l'autre vu les infos mises à dispo sur les factures et ces calculs évoluent selon la dernière taxe au gout du jours. Donc au lieu de faire deux fichiers ( Param.inf + calcul_xxx.dll ), je voulais mettre une fonction qui me renvoie les paramètres, pour visualisation, que j'aurai intégré à la dll. Ainsi en fonction de l'évolution du calcul du fournisseur ,je ne change que la dll associée. voilà,voilà..... Edit : Je garde ton lien sous le coude , super tutoriel !
Dernière édition par ygeronimi le Mer 11 Juil 2012 - 13:00, édité 1 fois | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Ma 1ère DLL Mer 11 Juil 2012 - 12:59 | |
| Oui, c'est un cas typique d'utilisation d'une DLL ! Avec cette technique, tu vas obtenir le résultat que tu cherches. | |
|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 11 Juil 2012 - 13:05 | |
| Oui, et comme Panoramic me permet un affichage dynamique qu'il y est 10 ou vingt variables à visualiser peut importe. La visualisation m' est utile pour savoir si la dll est à jours par comparaison avec la facture ( les taxes évoluant tellement vite dans ce pays . | |
|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Ma 1ère DLL Jeu 12 Juil 2012 - 22:45 | |
| Salut tout le monde. Voici ma nouvelle DLL : trigo.dll Cette DLL comporte pas moins de 18 fonctions toutes relatives à la trigonométrie. Les fonctions en question ne sont pas définies dans PANORAMIC (ni d’ailleurs dans beaucoup d’autres langages de programmation). Etant donné que ces fonctions sont spécifiques à la trigonométrie, cette DLL ne sera, sans doute, pas très utile pour la majorité des programmeurs, mais elle sera appréciée par certains. Le programme testTrigoDLL.bas suivant permet de tester les différentes fonctions contenues dans trigo.dll que vous pouvez télécharger sur mon webdav, dans le répertoire Mes DLL, sous répertoire trigo www.mydrive.chusername : panoramicien@papydall_panoramic password: panoramic123 Pour ceux qui le désirent, je mets également dans le même répertoire le source en DELPHI de cette DLL sous le nom trigo.dpr Pour tester la DLL, mettez dans le même répertoire testTrigoDLL.bas et trigo.dll Il est à noter que certaines fonctions ne sont pas définies pour certaines valeurs de la variable x ; alors pour éviter un message d’erreur, la valeur renvoyée par la fonction sera, dans ce cas égale à la valeur infinie arbitrairement choisie de 1E100. - Code:
-
' Test de la DLL trigo.dll ' Cette DLL contient 18 fonctions qui ne sont pas définies dans PANORAMIC ' et qui peuvent servir à certains. ' Lorsque la fonction n'est pas définie pour l'argument d'appel, elle retourne ' la valeur 1E100 (pour éviter le message d'erreur)
dim x,y,resultat ,i%,pi ,rad,deg pi = 4*atn(1)
print " TEST DE LA DLL TRIGO.DLL" : print : print dll_on "trigo.dll"
' Transforme les Radians en Dégrés rad = pi i% = dll_call2("Rad2Deg",adr(rad),adr(resultat)) print " ";rad;" radians = "; resultat ;" dégrés" ' Transforme les Dégrés en Radians deg = 180 i% = dll_call2("Deg2Rad",adr(deg),adr(resultat)) print " ";deg;" dégrés = "; resultat ;" radians" :print ' Renvoie la valeur de l'arc tangente de y/x en tenant compte des signes de Y et de X x = -1 : y = 1 i% = dll_call3("ArcTan2",adr(x),adr(y),adr(resultat)) print " atn2(";x;",";y;") = ";resultat
' Renvoie la valeur de cotangente x x = 0 i% = dll_call2("CoTan",adr(x),adr(resultat)) print " cotangente (";x;") = ";resultat
' Renvoie la valeur de la secante de x x = pi/4 i% = dll_call2("Secante",adr(x),adr(resultat)) print " secante (";x;") = ";resultat ' renvoie la valeur de la cosecante de x x = pi/2 i% = dll_call2("CoSecante",adr(x),adr(resultat)) print " cosecante (";x;") = ";resultat ' Renvoie la valeur de l'arc cotangente de x x = 1 i% = dll_call2("ArcCoTangente",adr(x),adr(resultat)) print " arccotangente (";x;") = ";resultat ' Renvoie la valeur de l'arc secante de x x = 1 i% = dll_call2("ArcSecante",adr(x),adr(resultat)) print " arcsecante (";x;") = ";resultat
' Renvoie la valeur de l'arc cosecante de x x = 1 i% = dll_call2("ArcCoSecante",adr(x),adr(resultat)) print " arcosecante (";x;") = ";resultat ' Renvoie la valeur de la cotangente hyperbolique de x x = 1 i% = dll_call2("HcoTan",adr(x),adr(resultat)) print " cotangente hyperbolique (";x;") = ";resultat
' Renvoie la valeur de la secant hyperbolique de x x = 0 i% = dll_call2("Hsec",adr(x),adr(resultat)) print " secante hyperbolique (";x;") = ";resultat ' Renvoie la valeur de la cosecante hyperbolique de x x = 1 i% = dll_call2("HCosec",adr(x),adr(resultat)) print " cosecante hyperbolique (";x;") = ";resultat x = 1 i% = dll_call2("ArgSh",adr(x),adr(resultat)) print " argument sinus hyperbolique (";x;") = ";resultat ' Renvoie la valeur de l'argument cosinus hyperbolique de x x = 1 i% = dll_call2("ArgCh",adr(x),adr(resultat)) print " argument cosinus hyperbolique (";x;") = ";resultat ' Renvoie la valeur de l'argument tangente hyperbolique de x x = -0.5 i% = dll_call2("ArgTh",adr(x),adr(resultat)) print " argument tangente hyperbolique (";x;") = ";resultat ' Renvoie le valeur de l'argument cotangente hyperbolique de x x = -3 i% = dll_call2("ArgCoTh",adr(x),adr(resultat)) print " argument cotangente hyperbolique (";x;") = ";resultat ' Renvoie la valeur de l'argument secante hyperbolique de x x = 0.5 i% = dll_call2("ArgSech",adr(x),adr(resultat)) print " argument secante hyperbolique (";x;") = ";resultat ' Renvoie la valeur de l'argument cosecante hyperbolique de x x = 3 i% = dll_call2("ArgCoSech",adr(x),adr(resultat)) print " argument cosecante hyperbolique (";x;") = ";resultat
dll_off
A+ | |
|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 13 Juil 2012 - 11:22 | |
| Je ne suis pas un utilisateur de trigonométrie mais je mémorise... ....on ne sait jamais En tout cas ,bravo pour cette nouvelle dll outils qui complète les possibilités de Panoramic | |
|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Ma 1ère DLL Ven 13 Juil 2012 - 19:08 | |
| Ça m’a permis de voir un petit peu plus clair dans le codage d’une DLL. Certainement j’en ferais d’autres plus ou mois ‘populaires’ ! | |
|