visual basic 6 calling PB DLL which then will call the GMP

Just starting out? Need help? Post your questions and find answers here.
applePi
Addict
Addict
Posts: 1404
Joined: Sun Jun 25, 2006 7:28 pm

visual basic 6 calling PB DLL which then will call the GMP

Post by applePi »

hi
in the messages:
http://www.purebasic.fr/english/viewtop ... 76&start=0
and
http://www.purebasic.fr/english/viewtop ... 68&start=0

there is a description on how to use GMP math library with purebasic, download a precompiled library "LIBGMP-3.DLL" from the site
ftp://deltatrinity.dyndns.org/gmp-4.2_D ... /pentium4/
and try the following code to multiply two numbers using the GMP dll

Code: Select all

Structure mpz ; multiprecision integer 
  mp_alloc.l 
  mp_size.l 
  mp_limb.l 
EndStructure 

i.mpz 
j.mpz 
k.mpz 

OpenConsole()

If OpenLibrary(1, "LIBGMP-3.DLL")
  CallFunction(1,"__gmpz_init",i); initialize integer number i 
  CallFunction(1,"__gmpz_init",j); initialize integer number j 
  CallFunction(1,"__gmpz_init",k); initialize integer number k
  ; set i equals to  number1 base 10 :
  CallFunction(1,"__gmpz_set_str",i, "33333",10) 
  ; set j equals to number2 base 10 :
  CallFunction(1,"__gmpz_set_str",j, "123456789",10)
  CallFunction(1,"__gmpz_mul",k,i,j); k= i*j 
  Result$=Space(63000);allocate space
  CallFunction(1,"__gmp_sprintf",Result$,"%Zd",k);convert integer to string in Result$ 
    
  CallFunction(1,"__gmpz_clear",i); deallocate memory 
  CallFunction(1,"__gmpz_clear",j) 
  CallFunction(1,"__gmpz_clear",k) 
  CloseLibrary(1) 
  PrintN(Result$)
  b$=Input()
  
EndIf 
CloseConsole()
but for fun i have read in :
http://www.swox.com/list-archives/gmp-d ... 00515.html
a description about using a powerbasic wrapper DLL so visual basic can call the functions of the GMP library, since VB6 can't call the CDECL convention
i have questions in using VB6 to call a pureBasic dll which will call the GMP dll
the pbgmp.dll may be ( i am not sure):

Code: Select all

Structure mpz ; multiprecision integer 
  mp_alloc.l 
  mp_size.l 
  mp_limb.l 
EndStructure 

i.mpz 
j.mpz 
k.mpz 
Global number1$
Global number2$
Global Result.s

ProcedureCDLL  multiply(number1$, number2$)
If OpenLibrary(1, "LIBGMP-3.DLL")
  CallFunction(1,"__gmpz_init",i)   ; initialize integer number i 
  CallFunction(1,"__gmpz_init",j)   ; initialize integer number j 
  CallFunction(1,"__gmpz_init",k)   ; initialize integer number k
  ; set i equals to  number1 base 10 :
  CallFunction(1,"__gmpz_set_str",i, number1$,10) 
  ; set j equals to number2 base 10 :
  CallFunction(1,"__gmpz_set_str",j, number2$,10)
  CallFunction(1,"__gmpz_mul",k,i,j)    ; k= i*j 
  Result.s=Space(63000);allocate space
  CallFunction(1,"__gmp_sprintf",Result.s,"%Zd",k)   ;convert integer to string in Result$ 
    
  CallFunction(1,"__gmpz_clear",i)  ; deallocate memory 
  CallFunction(1,"__gmpz_clear",j) 
  CallFunction(1,"__gmpz_clear",k) 
  CloseLibrary(1) 
  ProcedureReturn @Result.s
EndIf 
EndProcedure 
the VB 6 code may be:i have inspired by the "Rings" excellent and working file VB_Call_PBDll

Code: Select all

Private Declare Function multiply Lib "pbgmp.dll" (ByVal number1 As String, number2 As String) As Long
Private Declare Function lstrcpy Lib "Kernel32.dll" (ByVal MyString As String, ByVal MyLong As Long) As Long
Public number1$, number2$, Result$

Private Sub Command1_Click()
number1$ = "233"
number2$ = "333"
Dim pp As Long
pp = multiply(number1$, number2$)
Result$ = Space(1000)
Res = lstrcpy(Result$, pp)
MsgBox (Result$)
End Sub
the errors will be:
Run time error 453:
can't find DLL entry point multiply in pbgmp.dll
can someone please help,
how can VB6 call a PBdll which will call the GMP math dll
thanks
Last edited by applePi on Tue Jul 11, 2006 3:53 am, edited 1 time in total.
jack
Addict
Addict
Posts: 1358
Joined: Fri Apr 25, 2003 11:10 pm

Post by jack »

what version of PB are you using?
applePi
Addict
Addict
Posts: 1404
Joined: Sun Jun 25, 2006 7:28 pm

Post by applePi »

version 4.00
jack
Addict
Addict
Posts: 1358
Joined: Fri Apr 25, 2003 11:10 pm

Post by jack »

sorry for the late reply, been working long days, too tired...
I came accross a program some time ago, a wrapper I think, that would allow
VB6 to call a dll in both stdl and cdecl, but now can't find it.
but for version 4 use am import lib and the follwing code.
get the import lib ->libgmp-3.lib
Image

Code: Select all


;you can download gmp from ftp://deltatrinity.dyndns.org/ 

Structure mpz ; multiprecision integer 
  mp_alloc.l 
  mp_size.l 
  mp_limb.l 
EndStructure 

Structure mpq ; multiprecision rational 
  mp_num.mpz 
  mp_den.mpz 
EndStructure 

Structure mpf ; multiprecision floating point 
  mp_prec.l 
  mp_size.l 
  mp_expt.l 
  mp_limb.l 
EndStructure 

ImportC "libgmp-3.lib" 
  gmp_sprintz.l(dest.s,format.s,*n.mpz) As "___gmp_sprintf" 
  gmp_sprintq.l(dest.s,format.s,*n.mpq) As "___gmp_sprintf" 
  gmp_sprintf.l(dest.s,format.s,*n.mpf) As "___gmp_sprintf" 
  mpf_set_default_prec(prec.l) As "___gmpf_set_default_prec" 
  mpf_get_default_prec.l() As "___gmpf_get_default_prec" 
  mpf_init(*x.mpf) As "___gmpf_init" 
  mpf_init2(*x.mpf,prec.l) As "___gmpf_init2" 
  mpf_clear(*x.mpf) As "___gmpf_clear" 
  mpf_get_prec.l(*op.mpf) As "___gmpf_get_prec" 
  mpf_set_prec(*rop.mpf,prec.l) As "___gmpf_set_prec" 
  mpf_set_prec_raw(*rop.mpf,prec.l) As "___gmpf_set_prec_raw" 
  mpf_set(*rop.mpf,*op.mpf) As "___gmpf_set" 
  mpf_set_ui(*rop.mpf,op.l) As "___gmpf_set_ui" 
  mpf_set_si(*rop.mpf,op.l) As "___gmpf_set_si" 
  mpf_set_d(*rop.mpf,op.d) As "___gmpf_set_d" 
  mpf_set_z(*rop.mpf,*op.mpz) As "___gmpf_set_z" 
  mpf_set_q(*rop.mpf,*op.mpq) As "___gmpf_set_q" 
  mpf_set_str.l(*rop.mpf,str.s,base.l) As "___gmpf_set_str" 
  mpf_swap(*rop1.mpf,*rop2.mpf) As "___gmpf_swap" 
  mpf_init_set(*rop.mpf,*op.mpf) As "___gmpf_init_set" 
  mpf_init_set_ui(*rop.mpf,op.l) As "___gmpf_init_set_ui" 
  mpf_init_set_si(*rop.mpf,op.l) As "___gmpf_init_set_si" 
  mpf_init_set_d(*rop.mpf,op.d) As "___gmpf_init_set_d" 
  mpf_init_set_str.l(*rop.mpf,str.s,base.l) As "___gmpf_init_set_str" 
  mpf_get_d.d(*op.mpf) As "___gmpf_get_d" 
  mpf_get_d_2exp.d(expt.l,*op.mpf) As "___gmpf_get_d_2exp" 
  mpf_get_si.l(*op.mpf) As "___gmpf_get_si" 
  mpf_get_ui.l(*op.mpf) As "___gmpf_get_ui" 
  mpf_get_str.s(str.s,expptr.l,base.l,n_digits.l,*op.mpf) As "___gmpf_get_str" 
  mpf_ceil(*rop.mpf,*op.mpf) As "___gmpf_ceil" 
  mpf_floor(*rop.mpf,*op.mpf) As "___gmpf_floor" 
  mpf_trunc(*rop.mpf,*op.mpf) As "___gmpf_trunc" 
  mpf_integer_p.l(*op.mpf) As "___gmpf_integer_p" 
  mpf_fits_ulong_p.l(*op.mpf) As "___gmpf_fits_ulong_p" 
  mpf_fits_slong_p.l(*op.mpf) As "___gmpf_fits_slong_p" 
  mpf_fits_uint_p.l(*op.mpf) As "___gmpf_fits_uint_p" 
  mpf_fits_sint_p.l(*op.mpf) As "___gmpf_fits_sint_p" 
  mpf_fits_ushort_p.l(*op.mpf) As "___gmpf_fits_ushort_p" 
  mpf_fits_sshort_p.l(*op.mpf) As "___gmpf_fits_sshort_p" 
  mpf_add(*rop.mpf,*op1.mpf,*op2.mpf) As "___gmpf_add" 
  mpf_add_ui(*rop.mpf,*op1.mpf,op2.l) As "___gmpf_add_ui" 
  mpf_sub(*rop.mpf,*op1.mpf,*op2.mpf) As "___gmpf_sub" 
  mpf_ui_sub(*rop.mpf,op1.l,*op2.mpf) As "___gmpf_ui_sub" 
  mpf_sub_ui(*rop.mpf,*op1.mpf,op2.l) As "___gmpf_sub_ui" 
  mpf_mul(*rop.mpf,*op1.mpf,*op2.mpf) As "___gmpf_mul" 
  mpf_mul_ui(*rop.mpf,*op1.mpf,op2.l) As "___gmpf_mul_ui" 
  mpf_div(*rop.mpf,*op1.mpf,*op2.mpf) As "___gmpf_div" 
  mpf_ui_div(*rop.mpf,op1.l,*op2.mpf) As "___gmpf_ui_div" 
  mpf_div_ui(*rop.mpf,*op1.mpf,op2.l) As "___gmpf_div_ui" 
  mpf_sqrt(*rop.mpf,*op.mpf) As "___gmpf_sqrt" 
  mpf_sqrt_ui(*rop.mpf,op.l) As "___gmpf_sqrt_ui" 
  mpf_pow_ui(*rop.mpf,*op1.mpf,op2.l) As "___gmpf_pow_ui" 
  mpf_neg(*rop.mpf,*op.mpf) As "___gmpf_neg" 
  mpf_abs(*rop.mpf,*op.mpf) As "___gmpf_abs" 
  mpf_mul_2exp(*rop.mpf,*op1.mpf,op2.l) As "___gmpf_mul_2exp" 
  mpf_div_2exp(*rop.mpf,*op1.mpf,op2.l) As "___gmpf_div_2exp" 
  mpf_cmp.l(*op1.mpf,*op2.mpf) As "___gmpf_cmp" 
  mpf_cmp_d.l(*op1.mpf,op2.d) As "___gmpf_cmp_d" 
  mpf_cmp_ui.l(*op1.mpf,op2.l) As "___gmpf_cmp_ui" 
  mpf_cmp_si.l(*op1.mpf,op2.l) As "___gmpf_cmp_si" 
  mpf_eq.l(*op1.mpf,*op2.mpf,op3.l) As "___gmpf_eq" 
  mpf_reldiff(*rop.mpf,*op1.mpf,*op2.mpf) As "___gmpf_reldiff" 
  mpf_sgn.l(*op.mpf) As "___gmpf_sgn" 
  gmp_snprintf.l(buf.s,size.l,fmt.s,*op.mpf) As "___gmp_snprintf" 
  mpz_init(*integer.mpz) As "___gmpz_init" 
  mpz_init2(*integer.mpz,n.l) As "___gmpz_init2" 
  mpz_clear(*integer.mpz) As "___gmpz_clear" 
  mpz_realloc2(*integer.mpz,n.l) As "___gmpz_realloc2" 
;  mpz_realloc.l(*integer.mpz,) As "____gmpz_realloc" 
  mpz_set(*rop.mpz,*op.mpz) As "___gmpz_set" 
  mpz_set_ui(*rop.mpz,op.l) As "___gmpz_set_ui" 
  mpz_set_si(*rop.mpz,op.l) As "___gmpz_set_si" 
  mpz_set_d(*rop.mpz,op.d) As "___gmpz_set_d" 
  mpz_set_q(*rop.mpz,*op.mpq) As "___gmpz_set_q" 
  mpz_set_f(*rop.mpz,*op.mpf) As "___gmpz_set_f" 
  mpz_set_str.l(*rop.mpz,str.s,base.l) As "___gmpz_set_str" 
  mpz_swap(*rop1.mpz,*rop2.mpz) As "___gmpz_swap" 
  mpz_init_set(*rop.mpz,*op.mpz) As "___gmpz_init_set" 
  mpz_init_set_ui(*rop.mpz,op.l) As "___gmpz_init_set_ui" 
  mpz_init_set_si(*rop.mpz,op.l) As "___gmpz_init_set_si" 
  mpz_init_set_d(*rop.mpz,op.d) As "___gmpz_init_set_d" 
  mpz_init_set_str.l(*rop.mpz,str.s,base.l) As "___gmpz_init_set_str" 
  mpz_add(*rop.mpz,*op1.mpz,*op2.mpz) As "___gmpz_add" 
  mpz_add_ui(*rop.mpz,*op1.mpz,op2.l) As "___gmpz_add_ui" 
  mpz_sub(*rop.mpz,*op1.mpz,*op2.mpz) As "___gmpz_sub" 
  mpz_sub_ui(*rop.mpz,*op1.mpz,op2.l) As "___gmpz_sub_ui" 
  mpz_ui_sub(*rop.mpz,op1.l,*op2.mpz) As "___gmpz_ui_sub" 
  mpz_mul(*rop.mpz,*op1.mpz,*op2.mpz) As "___gmpz_mul" 
  mpz_mul_si(*rop.mpz,*op1.mpz,op2.l) As "___gmpz_mul_si" 
  mpz_mul_ui(*rop.mpz,*op1.mpz,op2.l) As "___gmpz_mul_ui" 
  mpz_addmul(*rop.mpz,*op1.mpz,*op2.mpz) As "___gmpz_addmul" 
  mpz_addmul_ui(*rop.mpz,*op1.mpz,op2.l) As "___gmpz_addmul_ui" 
  mpz_submul(*rop.mpz,*op1.mpz,*op2.mpz) As "___gmpz_submul" 
  mpz_submul_ui(*rop.mpz,*op1.mpz,op2.l) As "___gmpz_submul_ui" 
  mpz_mul_2exp(*rop.mpz,*op1.mpz,op2.l) As "___gmpz_mul_2exp" 
  mpz_neg(*rop.mpz,*op.mpz) As "___gmpz_neg" 
  mpz_abs(*rop.mpz,*op.mpz) As "___gmpz_abs" 
  mpz_cdiv_q(*q.mpz,*n.mpz,*d.mpz) As "___gmpz_cdiv_q" 
  mpz_cdiv_r(*r.mpz,*n.mpz,*d.mpz) As "___gmpz_cdiv_r" 
  mpz_cdiv_qr(*q.mpz,*r.mpz,*n.mpz,*d.mpz) As "___gmpz_cdiv_qr" 
  mpz_cdiv_q_ui.l(*q.mpz,*n.mpz,d.l) As "___gmpz_cdiv_q_ui" 
  mpz_cdiv_r_ui.l(*r.mpz,*n.mpz,d.l) As "___gmpz_cdiv_r_ui" 
  mpz_cdiv_qr_ui.l(*q.mpz,*r.mpz,*n.mpz,d.l) As "___gmpz_cdiv_qr_ui" 
  mpz_cdiv_ui.l(*n.mpz,d.l) As "___gmpz_cdiv_ui" 
  mpz_cdiv_q_2exp(*q.mpz,*n.mpz,b.l) As "___gmpz_cdiv_q_2exp" 
  mpz_cdiv_r_2exp(*r.mpz,*n.mpz,b.l) As "___gmpz_cdiv_r_2exp" 
  mpz_fdiv_q(*q.mpz,*n.mpz,*d.mpz) As "___gmpz_fdiv_q" 
  mpz_fdiv_r(*r.mpz,*n.mpz,*d.mpz) As "___gmpz_fdiv_r" 
  mpz_fdiv_qr(*q.mpz,*r.mpz,*n.mpz,*d.mpz) As "___gmpz_fdiv_qr" 
  mpz_fdiv_q_ui.l(*q.mpz,*n.mpz,d.l) As "___gmpz_fdiv_q_ui" 
  mpz_fdiv_r_ui.l(*r.mpz,*n.mpz,d.l) As "___gmpz_fdiv_r_ui" 
  mpz_fdiv_qr_ui.l(*q.mpz,*r.mpz,*n.mpz,d.l) As "___gmpz_fdiv_qr_ui" 
  mpz_fdiv_ui.l(*n.mpz,d.l) As "___gmpz_fdiv_ui" 
  mpz_fdiv_q_2exp(*q.mpz,*n.mpz,b.l) As "___gmpz_fdiv_q_2exp" 
  mpz_fdiv_r_2exp(*r.mpz,*n.mpz,b.l) As "___gmpz_fdiv_r_2exp" 
  mpz_tdiv_q(*q.mpz,*n.mpz,*d.mpz) As "___gmpz_tdiv_q" 
  mpz_tdiv_r(*r.mpz,*n.mpz,*d.mpz) As "___gmpz_tdiv_r" 
  mpz_tdiv_qr(*q.mpz,*r.mpz,*n.mpz,*d.mpz) As "___gmpz_tdiv_qr" 
  mpz_tdiv_q_ui.l(*q.mpz,*n.mpz,d.l) As "___gmpz_tdiv_q_ui" 
  mpz_tdiv_r_ui.l(*r.mpz,*n.mpz,d.l) As "___gmpz_tdiv_r_ui" 
  mpz_tdiv_qr_ui.l(*q.mpz,*r.mpz,*n.mpz,d.l) As "___gmpz_tdiv_qr_ui" 
  mpz_tdiv_ui.l(*n.mpz,d.l) As "___gmpz_tdiv_ui" 
  mpz_tdiv_q_2exp(*q.mpz,*n.mpz,b.l) As "___gmpz_tdiv_q_2exp" 
  mpz_tdiv_r_2exp(*r.mpz,*n.mpz,b.l) As "___gmpz_tdiv_r_2exp" 
  mpz_mod(*r.mpz,*n.mpz,*d.mpz) As "___gmpz_mod" 
  mpz_mod_ui.l(*r.mpz,*n.mpz,d.l) As "___gmpz_mod_ui" 
  mpz_divexact(*q.mpz,*n.mpz,*d.mpz) As "___gmpz_divexact" 
  mpz_divexact_ui(*q.mpz,*n.mpz,d.l) As "___gmpz_divexact_ui" 
  mpz_divisible_p.l(*n.mpz,*d.mpz) As "___gmpz_divisible_p" 
  mpz_divisible_ui_p.l(*n.mpz,d.l) As "___gmpz_divisible_ui_p" 
  mpz_divisible_2exp_p.l(*n.mpz,b.l) As "___gmpz_divisible_2exp_p" 
  mpz_congruent_p.l(*n.mpz,*c.mpz,*d.mpz) As "___gmpz_congruent_p" 
  mpz_congruent_ui_p.l(*n.mpz,c.l,d.l) As "___gmpz_congruent_ui_p" 
  mpz_congruent_2exp_p.l(*n.mpz,*c.mpz,b.l) As "___gmpz_congruent_2exp_p" 
  mpz_powm(*rop.mpz,*base.mpz,*expt.mpz,*mod.mpz) As "___gmpz_powm" 
  mpz_powm_ui(*rop.mpz,*base.mpz,expt.l,*mod.mpz) As "___gmpz_powm_ui" 
  mpz_pow_ui(*rop.mpz,*base.mpz,expt.l) As "___gmpz_pow_ui" 
  mpz_ui_pow_ui(*rop.mpz,base.l,expt.l) As "___gmpz_ui_pow_ui" 
  mpz_root.l(*rop.mpz,*op.mpz,n.l) As "___gmpz_root" 
  mpz_sqrt(*rop.mpz,*op.mpz) As "___gmpz_sqrt" 
  mpz_sqrtrem(*rop1.mpz,*rop2.mpz,*op.mpz) As "___gmpz_sqrtrem" 
  mpz_perfect_power_p.l(*op.mpz) As "___gmpz_perfect_power_p" 
  mpz_perfect_square_p.l(*op.mpz) As "___gmpz_perfect_square_p" 
  mpz_probab_prime_p.l(*n.mpz,reps.l) As "___gmpz_probab_prime_p" 
  mpz_nextprime(*rop.mpz,*op.mpz) As "___gmpz_nextprime" 
  mpz_gcd(*rop.mpz,*op1.mpz,*op2.mpz) As "___gmpz_gcd" 
  mpz_gcd_ui.l(*rop.mpz,*op1.mpz,op2.l) As "___gmpz_gcd_ui" 
  mpz_gcdext(*g.mpz,*s.mpz,*t.mpz,*a.mpz,*b.mpz) As "___gmpz_gcdext" 
  mpz_lcm(*rop.mpz,*op1.mpz,*op2.mpz) As "___gmpz_lcm" 
  mpz_lcm_ui(*rop.mpz,*op1.mpz,op2.l) As "___gmpz_lcm_ui" 
  mpz_invert.l(*rop.mpz,*op1.mpz,*op2.mpz) As "___gmpz_invert" 
  mpz_jacobi.l(*a.mpz,*b.mpz) As "___gmpz_jacobi" 
  mpz_legendre.l(*a.mpz,*p.mpz) As "___gmpz_legendre" 
  mpz_kronecker.l(*a.mpz,*b.mpz) As "___gmpz_kronecker" 
  mpz_kronecker_si.l(*a.mpz,b.l) As "___gmpz_kronecker_si" 
  mpz_kronecker_ui.l(*a.mpz,b.l) As "___gmpz_kronecker_ui" 
  mpz_si_kronecker.l(a.l,*b.mpz) As "___gmpz_si_kronecker" 
  mpz_ui_kronecker.l(a.l,*b.mpz) As "___gmpz_ui_kronecker" 
  mpz_remove.l(*rop.mpz,*op.mpz,*f.mpz) As "___gmpz_remove" 
  mpz_fac_ui(*rop.mpz,op.l) As "___gmpz_fac_ui" 
  mpz_bin_ui(*rop.mpz,*n.mpz,k.l) As "___gmpz_bin_ui" 
  mpz_bin_uiui(*rop.mpz,n.l,k.l) As "___gmpz_bin_uiui" 
  mpz_fib_ui(*fn.mpz,n.l) As "___gmpz_fib_ui" 
  mpz_fib2_ui(*fn.mpz,*fnsub1.mpz,n.l) As "___gmpz_fib2_ui" 
  mpz_lucnum_ui(*ln.mpz,n.l) As "___gmpz_lucnum_ui" 
  mpz_lucnum2_ui(*ln.mpz,*lnsub1.mpz,n.l) As "___gmpz_lucnum2_ui" 
  mpz_cmp.l(*op1.mpz,*op2.mpz) As "___gmpz_cmp" 
  mpz_cmp_d.l(*op1.mpz,op2.d) As "___gmpz_cmp_d" 
  mpz_cmp_si.l(*op1.mpz,op2.l) As "____gmpz_cmp_si" 
  mpz_cmp_ui.l(*op1.mpz,op2.l) As "____gmpz_cmp_ui" 
  mpz_cmpabs.l(*op1.mpz,*op2.mpz) As "___gmpz_cmpabs" 
  mpz_cmpabs_d.l(*op1.mpz,op2.d) As "___gmpz_cmpabs_d" 
  mpz_cmpabs_ui.l(*op1.mpz,op2.l) As "___gmpz_cmpabs_ui" 
  mpz_sgn.l(*op.mpz) As "___gmpz_sgn" 
  mpz_and(*rop.mpz,*op1.mpz,*op2.mpz) As "___gmpz_and" 
  mpz_ior(*rop.mpz,*op1.mpz,*op2.mpz) As "___gmpz_ior" 
  mpz_xor(*rop.mpz,*op1.mpz,*op2.mpz) As "___gmpz_xor" 
  mpz_com(*rop.mpz,*op.mpz) As "___gmpz_com" 
  mpz_popcount.l(*op.mpz) As "___gmpz_popcount" 
  mpz_hamdist.l(*op1.mpz,*op2.mpz) As "___gmpz_hamdist" 
  mpz_scan0.l(*op.mpz,starting_bit.l) As "___gmpz_scan0" 
  mpz_scan1.l(*op.mpz,starting_bit.l) As "___gmpz_scan1" 
  mpz_setbit(*rop.mpz,bit_index.l) As "___gmpz_setbit" 
  mpz_clrbit(*rop.mpz,bit_index.l) As "___gmpz_clrbit" 
  mpz_tstbit.l(*op.mpz,bit_index.l) As "___gmpz_tstbit" 
  mpz_import(*rop.mpz,count.l,order.l,size.l,endian.l,nails.l,op.l) As "___gmpz_import" 
  mpz_export.l(rop.l,countp.l,order.l,size.l,endian.l,nails.l,*op.mpz) As "___gmpz_export" 
  mpz_fits_ulong_p.l(*op.mpz) As "___gmpz_fits_ulong_p" 
  mpz_fits_slong_p.l(*op.mpz) As "___gmpz_fits_slong_p" 
  mpz_fits_uint_p.l(*op.mpz) As "___gmpz_fits_uint_p" 
  mpz_fits_sint_p.l(*op.mpz) As "___gmpz_fits_sint_p" 
  mpz_fits_ushort_p.l(*op.mpz) As "___gmpz_fits_ushort_p" 
  mpz_fits_sshort_p.l(*op.mpz) As "___gmpz_fits_sshort_p" 
  mpz_odd_p.l(*op.mpz) As "___gmpz_odd_p" 
  mpz_even_p.l(*op.mpz) As "___gmpz_even_p" 
  mpz_size.l(*op.mpz) As "___gmpz_size" 
  mpz_sizeinbase.l(*op.mpz,base.l) As "___gmpz_sizeinbase" 
  mpq_init(*dest_rational.mpq) As "___gmpq_init" 
  mpq_clear(*rational_number.mpq) As "___gmpq_clear" 
  mpq_set(*rop.mpq,*op.mpq) As "___gmpq_set" 
  mpq_set_z(*rop.mpq,*op.mpz) As "___gmpq_set_z" 
  mpq_set_ui(*rop.mpq,op1.l,op2.l) As "___gmpq_set_ui" 
  mpq_set_si(*rop.mpq,op1.l,op2.l) As "___gmpq_set_si" 
  mpq_set_str.l(*rop.mpq,str.s,base.l) As "___gmpq_set_str" 
  mpq_swap(*rop1.mpq,*rop2.mpq) As "___gmpq_swap" 
  mpq_get_d.d(*op.mpq) As "___gmpq_get_d" 
  mpq_set_d(*rop.mpq,op.d) As "___gmpq_set_d" 
  mpq_set_f(*rop.mpq,*op.mpf) As "___gmpq_set_f" 
  mpq_get_str.s(str.s,base.l,*op.mpq) As "___gmpq_get_str" 
  mpq_add(*sum.mpq,*addend1.mpq,*addend2.mpq) As "___gmpq_add" 
  mpq_sub(*difference.mpq,*minuend.mpq,*subtrahend.mpq) As "___gmpq_sub" 
  mpq_mul(*product.mpq,*multiplier.mpq,*multiplicand.mpq) As "___gmpq_mul" 
  mpq_mul_2exp(*rop.mpq,*op1.mpq,op2.l) As "___gmpq_mul_2exp" 
  mpq_div(*quotient.mpq,*dividend.mpq,*divisor.mpq) As "___gmpq_div" 
  mpq_div_2exp(*rop.mpq,*op1.mpq,op2.l) As "___gmpq_div_2exp" 
  mpq_neg(*negated_operand.mpq,*operand.mpq) As "___gmpq_neg" 
  mpq_abs(*rop.mpq,*op.mpq) As "___gmpq_abs" 
  mpq_inv(*inverted_number.mpq,*number.mpq) As "___gmpq_inv" 
  mpq_cmp.l(*op1.mpq,*op2.mpq) As "___gmpq_cmp" 
  mpq_cmp_ui.l(*op1.mpq,num2.l,den2.l) As "____gmpq_cmp_ui" 
  mpq_cmp_si.l(*op1.mpq,num2.l,den2.l) As "____gmpq_cmp_si" 
  mpq_sgn.l(*op.mpq) As "___gmpq_sgn" 
  mpq_equal.l(*op1.mpq,*op2.mpq) As "___gmpq_equal" 
  mpq_get_num(*numerator.mpz,*rational.mpq) As "___gmpq_get_num" 
  mpq_get_den(*denominator.mpz,*rational.mpq) As "___gmpq_get_den" 
  mpq_set_num(*rational.mpq,*numerator.mpz) As "___gmpq_set_num" 
  mpq_set_den(*rational.mpq,*denominator.mpz) As "___gmpq_set_den" 
  mpq_canonicalize(*op.mpq) As "___gmpq_canonicalize" 
EndImport 

OpenConsole() 
ConsoleTitle ("GMP.DLL test") 

s.s 

; integer ------------------------------------------------------------------------- 

i.mpz 
j.mpz 
k.mpz 

mpz_init(@i)            ;initialize multi-precision integer 
mpz_init(@j) 
mpz_init(@k) 
mpz_set_str(@i,"2",10)  ;i = 2 base 10 
mpz_set_str(@j,"7",10) 
mpz_mul(@k,@i,@j)       ;k = i * j 
s=Space(256)            ;allocate memory for string 
gmp_sprintz(s,"%Zd",@k) ;sprint the value of k into string s 
PrintN(s) 
mpz_clear(@k)           ;de-allocate memory 
mpz_clear(@j) 
mpz_clear(@i) 

; rational ------------------------------------------------------------------------ 

n.mpq 
m.mpq 
q.mpq 

mpq_init(@n) 
mpq_init(@m) 
mpq_init(@q) 
mpq_set_str(@n,"4/12",10) 
mpq_canonicalize(@n) 
mpq_set_str(@m,"1/5",10) 
mpq_add(@q,@n,@m) 
s=Space(256) 
gmp_sprintq(s,"%Qd",@q) 
PrintN(s) 
mpq_clear(@q) 
mpq_clear(@m) 
mpq_clear(@n) 

; floating point ------------------------------------------------------------------ 

x.mpf 
y.mpf 
z.mpf 

mpf_init2(@x,256) 
mpf_init2(@y,256) 
mpf_init2(@z,256) 
mpf_set_str(@x,"2",10) 
mpf_sqrt(@y,@x) 
s=Space(256) 
gmp_sprintf(s,"%77.72Fe",@y) 
PrintN(s) 
mpf_pow_ui(@z,@y,2) 
s=Space(256) 
gmp_sprintf(s,"%77.72Fe",@z) 
PrintN(s) 
mpf_clear(@z) 
mpf_clear(@y) 
mpf_clear(@x) 


Print("press the return key to end. ") 
Input() 
CloseConsole() 
End 
applePi
Addict
Addict
Posts: 1404
Joined: Sun Jun 25, 2006 7:28 pm

Post by applePi »

thanks jack for your code , i have run it successfully whithin PureBasic environment. it has a full description of the functions of the gmp, thanks.
Post Reply