Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Toplevel crashes when trying to call external functions
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: art yerkes <ayerkes@s...>
Subject: Re: [Caml-list] Toplevel crashes when trying to call external functions
On Sat, 10 Jul 2004 18:20:47 -0700 (PDT)
Andy Yang <yyu08@yahoo.com> wrote:

> Hi, all
> 
> I am relatively new to Ocaml. Sorry about the spam if
> this is a trivial problem. I am trying to give call
> some external functions. 
> 
> Some codes are as follows:
> 
> value zchaff_InitManager(void)
> {
>   CAMLparam0();  
>   void * solver = SAT_InitManager();
>   value val = alloc(1, Custom_tag);
>   Int32_val(val) = (int) solver;
>   CAMLreturn ( val );
> }
> 
> void zchaff_ReadCnf(value mng, value filename)
> {
>   CAMLparam2(mng, filename);
>   void* solver = (void*)Int32_val(mng);
>   char * fn = String_val(filename);
>   read_cnf(solver, fn);  
>   CAMLreturn0;
> }
> 

These may not solve this specific problem but I think they are good
advice:

First:
17.9.2. Custom blocks must be allocated via the alloc_custom function.
(And remember that the custom block size argument is in bytes).

Second:
Passing 1 as the block size to alloc allocates a block with one word
as a tail (at offset 0), but Data_custom_val accesses a value in the
tail at offset 1.  This is probably the error you're looking for.

Third:
I don't understand why you're going through Int32_val and Val_int32
to get and set your pointer.  You probably want to write a new macro
that will access the custom area as a pointer-sized chunk on every
architecture.  Assuming pointers to be 32-bits really is a bad idea.
-- 
Hey, Adam Smith, keep your invisible hands to yourself!

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners