[Résolu]Gestion de libGmp-3.dll
Publié : mer. 11/juil./2007 11:32
Bonjour,
Développant une application VB nécessitant l'usage de la librairie GMP (GNU Multiple Precision)
je découvre PureBasic par obligation du fait de l'obligation d'utiliser un wrapper (VB n'acceptant pas les cdecl) - de plus cette solution est plus simple que réécrire GMP
J'ai trouvé le code source d'une dll Purebasic ayant cet usage mais son développement concernant la gestion des espaces comporte des lacunes :
la gestion n'est pas dynamique si bien que l'affectation fixe (chaine de 700 000 caractères par défaut) induit des temps de réponses très lourds.
Avant de me lancer à acquérir une licence PureBasic afin de la recompiler après modification
(sans parler de l'acquisition de la maitrise du langage lol)
quelqu'un pourrait-il me confirmer la solution ou me l'indiquer car je ne maitrise pas du tout PB ?
Dll source
mais encore faudrait-il pouvoir la tester.
Merci de votre sollicitude.
Développant une application VB nécessitant l'usage de la librairie GMP (GNU Multiple Precision)
je découvre PureBasic par obligation du fait de l'obligation d'utiliser un wrapper (VB n'acceptant pas les cdecl) - de plus cette solution est plus simple que réécrire GMP

J'ai trouvé le code source d'une dll Purebasic ayant cet usage mais son développement concernant la gestion des espaces comporte des lacunes :
la gestion n'est pas dynamique si bien que l'affectation fixe (chaine de 700 000 caractères par défaut) induit des temps de réponses très lourds.
Avant de me lancer à acquérir une licence PureBasic afin de la recompiler après modification
(sans parler de l'acquisition de la maitrise du langage lol)
quelqu'un pourrait-il me confirmer la solution ou me l'indiquer car je ne maitrise pas du tout PB ?
Dll source
Il me semble que la solution suivante ne doit pas être loin du compteStructure mpz ; multiprecision integer
mp_alloc.l
mp_size.l
mp_limb.l
EndStructure
ImportC "libgmp-3.lib"
gmp_sprintz.l(dest.s,format.s,*n.mpz) As "___gmp_sprintf"
mpz_init(*integer.mpz) As "___gmpz_init"
mpz_clear(*integer.mpz) As "___gmpz_clear"
mpz_set_str.l(*rop.mpz,str.s,base.l) As "___gmpz_set_str"
mpz_mul(*rop.mpz,*op1.mpz,*op2.mpz) As "___gmpz_mul"
EndImport
Global s.s
ProcedureDLL mult(frst$,scnd$)
; integer -------------------------------------------------------------------------
i.mpz
j.mpz
r.mpz
mpz_init(@i) ;initialize multi-precision integer
mpz_init(@j)
mpz_init(@r)
mpz_set_str(@i,frst$,10) ;i = FirstNum$ base 10
mpz_set_str(@j,scnd$,10)
mpz_set_str(@r,"",10)
s=Space(700000)
mpz_mul(@r,@i,@j)
gmp_sprintz(s,"%Zd",@r) ;sprint the value of k into string s
mpz_clear(@r) ;de-allocate memory
mpz_clear(@j)
mpz_clear(@i)
ProcedureReturn @s.s
EndProcedure
; IDE Options = PureBasic v4.00 (Windows - x86)
; ExecutableFormat = Shared Dll
; CursorPosition = 295
; FirstLine = 233
; Folding = A5
; EnableXP
; DisableDebugger
mais encore faudrait-il pouvoir la tester.
Télécharger LibGMP-3.dll
;s=Space(700000) remplacé par
s=Space(@r.mp_size.l + 1)
Merci de votre sollicitude.