Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] CamlIDL: omitting struct fields
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Dmitry Bely <dbely@m...>
Subject: Re: [Caml-list] CamlIDL: omitting struct fields
T Teemu E Kurppa <ttkurppa@cs.Helsinki.FI> writes:

> Last weekend I started working on a hobby project, where I'll use Ocaml to
> implement some parts of game AI for a game, which itself is written in
> plain C. I'm using CamlIDL to help interfacing between C and Ocaml.
> 
> Unfortunately I encountered problems, when I omitted some struct fields
> from IDL specification. According the chapter 6 of CamlIDL manual
> (http://caml.inria.fr/camlidl/htmlman/main006.html), omitting irrelevant
> struct fields should be possible.
> 
> However, a following example doesn't work the way I think it should work.
> In the C struct, three int fields x,y,z are defined. In IDL definition,
> I omit y.
> 
> Program prints
> x=1, y=3, z=134648512
> althought I think it should print (of course y can be any number)
> x=1, y=4911232, z=3
> 
> Have I misunderstood something ?

Maybe :-) If you really need the trick with fields omitting (BTW, why?),
you should manually include the header file with "bar" definition into the
camlidl-generated c_idl.c, so it will use the correct memory
layout. Camlidl manual says that very clear.

> - c_impl.c: ---------------------------
> 
> #include <stdio.h>
> 
> struct bar {
>   int x;
>   int y;
>   int z;
> };
> 
> void f (struct bar* pbar) {
>   printf ("x=%d, y=%d, z=%d\n", pbar->x, pbar->y, pbar->z);
>   return;
> }
> 
> 
> 
> - c_idl.idl: ------------------------------
> struct bar {
>   int x;
>   //int y;
>   int z;
> };
> 
> void f ([in,ref] struct bar* pbar);
> 
> 
> 
> - idl_test.ml: ---------------------------
> open C_idl
> 
> let main () =
>   let bar = {x = 1;
>            (*y = 2;*)
>              z = 3} in
>     f(bar)
> 
> let _ = main ()

Hope to hear from you soon,
Dmitry


-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr