From: Dmitry Bely <dbely@mail.ru>
To: caml-list@inria.fr
Subject: Re: [Caml-list] CamlIDL documentation and COM issues
Date: Tue, 04 Jun 2002 21:23:04 +0400 [thread overview]
Message-ID: <8z5vq7pj.fsf@mail.ru> (raw)
In-Reply-To: <3CFCEAB6.5040204@hars.de> (Florian Hars's message of "Tue, 04 Jun 2002 18:28:38 +0200")
Florian Hars <florian@hars.de> writes:
> I am trying to write an interface to an existing C library and I
> intend to use CamlIDL for this task, but I am missing some more
> HOWTO-like documentation.
>
> The library uses a pattern that should be common enough to supported
> in CamlIDL (and explained in the hints on writing IDL files): there is
> a struct that is only of internal relavance, and there is an open and
> a close function that returns or frees a pointer to such a struct, and
> several functions that operate on such a handle:
>
> typedef struct { /* things */ } Foo;
> typedef Foo * FooHandle;
> FooHandle FooOpen(args...);
> int FooOperate(FooHandle fhdl, args...);
> void FooClose(FooHandle fhdl);
>
> Now all I need is a way to put this handle into a Caml variable (and,
> optionally, to call FooClose automatically whenever the handle runs
> out of scope). It looks like the [abstract] and [ptr] attributes,
> either alone or in combination, might be relevant for this task. But
> [ptr] requires the Com module, which I do not want to use. (OK, it is
> tiny under unix, but still...
It's easy:
[interface.idl]
quote(c,"#include <foo-native-definition.h>");
typedef [abstract,finalize(FooClose)] void* FooHandle;
FooHandle FooOpen(args...);
int FooOperate(FooHandle fhdl, args...);
void FooClose(FooHandle fhdl);
$camlidl -no-include interface.idl
FooClose() will be called automatically when Foo instance is
garbage-collected.
> what happens if I ever recompile the
> program under windoze? Shouldn't the generally useful features for
> interfacing to C/C++ and the COM-specific stuff be somehow separated,
> like in a module Idl and another module Com? This would certainly help
> to reduce the prevailing confusion over the possible uses of
> CamlIDL. Or is it irrelevant for my problem?)
Com module works under unix and windows (under Unix some COM stuff is
emulated), so there is no such problem.
> An example for the use of errorcheck(fn) and a remark on the type of
> fn in errorcheck might be helpful, too.
If you write IDL definition
typedef [errorcheck(checkFoo)] something Foo;
then checkFoo() should have C prototype
void check(Foo);
> Oh, and shouldn't the example on page 24 of the Manual (1.0.4) read
>
> double time() quote(call, "_res=....; ");
> ^^^^^^
> Or is "call" implicit if no ident is given in a quote in a function
> definition?
Yes, "call" can be ommited:
[camlidl/compiler/parser_midl.mly]
...
opt_quotes:
opt_quotes QUOTE LPAREN STRING RPAREN
{ ("call", $4) :: $1 }
| opt_quotes QUOTE LPAREN ident COMMA STRING RPAREN
{ ($4, $6) :: $1 }
| /* empty */
{ [] }
;
But you are right, this doesn't seem to be documented in the manual. Ask
Xavier Leroy for the correction.
Hope to hear from you soon,
Dmitry
-------------------
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
next prev parent reply other threads:[~2002-06-04 17:25 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-06-04 16:28 Florian Hars
2002-06-04 17:23 ` Dmitry Bely [this message]
2002-06-07 13:46 ` Florian Hars
2002-06-08 19:16 ` Dmitry Bely
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8z5vq7pj.fsf@mail.ru \
--to=dbely@mail.ru \
--cc=caml-list@inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox