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: T Teemu E Kurppa <ttkurppa@c...>
Subject: Re: [Caml-list] CamlIDL: omitting struct fields
On 27 Aug 2001, Dmitry Bely wrote:

> T Teemu E Kurppa <ttkurppa@cs.Helsinki.FI> writes:
>
> > 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.
< ... skipping ... >
> > Have I misunderstood something ?
>
> Maybe :-) If you really need the trick with fields omitting (BTW, why?),

The C-part of the implementation has many C-structs with information
relevant for the AI,  but unfortunately these structs also contain some
GUI-specific fields. Design flaw obviously (Hey, I haven't done it ! :)).

So I thought it would be cleaner to omit these fields with CamlIDL.

> 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.

Okay, I think I understand the problem now. IMHO the manual didn't state
this very clearly in Chapter 6, but on the other hand it would be better
to read the whole manual before whining ;)

Anyway, I noticed that it's possible to avoid _manual_ modification of
camlidl-generated file with quote-statement and -no-include switch.
Below is a working example for those who have stumbled on same problem.
Add -no-include switch to camlidl command.

> Hope to hear from you soon,
> Dmitry

I'll report, if I get something interesting done. And thanks for the
help !

Teemu


- c_idl.idl --------------------------
quote( h, "#include \"c_impl.h\"\n")

struct bar {
  int x;
  //int y;
  int z;
};

void f ([in,ref] struct bar* pbar);



- c_impl.h ---------------------------
#ifndef C_IMPL_H
#define C_IMPL_H

struct bar {
  int x;
  int y;
  int z;
};

#endif



- c_impl.c ---------------------------
#include <stdio.h>
#include "c_impl.h"

void f (struct bar* pbar) {
  printf ("x=%d, y=%d, z=%d\n", pbar->x, pbar->y, pbar->z);
  return;
}


- idl_test.ml ------------------------
open C_idl

let main () =
  let bar = {x = 1;
	   (*y = 2;*)
	     z = 3} in
    f(bar)

let _ = main ()


Teemu Kurppa
Teemu.Kurppa@Helsinki.fi


-------------------
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