From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=AWL autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail4-relais-sop.national.inria.fr (mail4-relais-sop.national.inria.fr [192.134.164.105]) by yquem.inria.fr (Postfix) with ESMTP id 3F78EBB84 for ; Thu, 11 Dec 2008 17:21:54 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ag8BAFLMQEnVJFBbkWdsb2JhbACTTQEBAQEJCwoHEQO5TYJ5 X-IronPort-AV: E=Sophos;i="4.33,753,1220220000"; d="scan'208";a="32525871" Received: from mx-out.libertysurf.net (HELO mail.libertysurf.net) ([213.36.80.91]) by mail4-smtp-sop.national.inria.fr with ESMTP; 11 Dec 2008 17:21:54 +0100 Received: from [192.168.1.2] (91.168.179.2) by mail.libertysurf.net (7.3.118.8) id 493FA97800050073 for caml-list@yquem.inria.fr; Thu, 11 Dec 2008 18:32:45 +0100 From: Florent Monnier To: caml-list@yquem.inria.fr Subject: Re: [Caml-list] wrapping external classes Date: Thu, 11 Dec 2008 17:21:28 +0100 User-Agent: KMail/1.9.10 References: <8119C403-2D50-4DFA-901C-FC3F8409843E@gmail.com> <20081211103723.GE18977@NANA.localdomain> <49412CC8.5080902@frisch.fr> In-Reply-To: <49412CC8.5080902@frisch.fr> MIME-Version: 1.0 Content-Disposition: inline Message-Id: <200812111721.28440.fmonnier@linux-nantes.fr.eu.org> X-Face: -0"dKXwF0PiXr]fa$^)NJY7$;waqUckGcM7&q,VU?Xv\[=CiVM]g]pDs^xmfU9+Q=Z,OdfMHUR-7Ao%evJh.=aiq,#r0Ux0dm'!l|zeAXj||$>1_(Lv4Hc",&F}sbHeK0`SBA$_|XP Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Spam: no; 0.00; ocaml:01 finalizer:01 finalizer:01 finalizers:01 work-around:01 ocaml:01 struct:01 integer:01 terminate:01 caml-list:01 termination:01 explicitly:02 binding:02 external:03 exit:04 > > (* use a destroy method explicitly if you need to make sure the > > destructor * is called --- Gc.finalise doesn't guarantee this (e.g. the > > program might * terminate before the finalisation function is executed) you can use at_exit to garanty a call before termination > If the handle is really an OCaml integer, it is not possible to attach a > finalizer to it. The finalizer could be attached to the object that > wraps the handle; but the best solution is to use custom blocks and C > finalizers in the C binding. if you are not so fluent in C/C++ there is this work-around that does work: http://www.linux-nantes.org/~fmonnier/OCaml/ocaml-wrapping-c.php#ref_finalise but indeed the classic way is to use the custom_operations struct: http://www.linux-nantes.org/~fmonnier/OCaml/ocaml-wrapping-c.php#ref_custom