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