Le 06/11/2013 01:07, Benoît Minisini a écrit :
>
> What is the exact definition of 'uuid_t' ?
>
> Also, you can use valgrind to know when exactly the faulty memory
> access occurs. This will give better clues.
>

typedef unsigned char uuid_t[16];

You get it in the '/usr/include/uuid.h', that you must read before
writing any external definition.

So, 'uuid_t' is a pointer to 16 'unsigned char', i.e. 16 bytes.

Now your code:

----------------------------------------------------------------------
' Gambas module file

' void uuid_generate(uuid_t out);
Extern UUID_Gen(op As Pointer) As Pointer In "libuuid:1" Exec
"uuid_generate"

' void uuid_unparse(uuid_t uu, char *out)
Extern UUID_ToStr(ip As Pointer, op As Pointer) As Pointer In
"libuuid:1" Exec "uuid_unparse"

Public Sub Main()

   Dim OP As Pointer    ' ptr to the uuid returned by uuid_generate
   Dim SP As Pointer    ' ptr to the string returned by uuid_unparse

   Dim sOP As String    ' our result (UUID as a string)
   Dim rtn As Integer   ' int rtn code from extern funcs
   Dim sArch As String  ' system architecture (selects pointer length)

   sArch = System.Architecture
   Error "Arch=" & sArch

   OP = Alloc(IIf(sArch = "x86", 4, 8))
   SP = Alloc(IIf(sArch = "x86", 4, 8))

----> Don't do that, use the SizeOf() function.

   rtn = UUID_Gen(OP)

----> OP must points at a 16 bytes allocation. So you failed! The 
library will erase the memory past the allocation, making everything 
crash sooner or later.

   Error "UUID_Gen=" & rtn

   rtn = UUID_ToStr(OP, SP)

----> That function returns nothing. I don't know why you think Gambas 
will make it return something. Moreover, if you read the doc, it tells 
you that SP must point at a 37 bytes allocation. So you failed again, 
and the library will erase the memory randomly a second time.

You really must know C and how a CPU works to deal with extern 
functions. Alas, Gambas can't help there! Or, at least, it does as much 
as he can.

-- 
Benoît Minisini

------------------------------------------------------------------------------
November Webinars for C, C++, Fortran Developers
Accelerate application performance with scalable programming models. Explore
techniques for threading, error checking, porting, and tuning. Get the most 
from the latest Intel processors and coprocessors. See abstracts and register
http://pubads.g.doubleclick.net/gampad/clk?id=60136231&iu=/4140/ostg.clktrk
_______________________________________________
Gambas-user mailing list
Gambas-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gambas-user

Reply via email to