From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id MAA11831 for caml-redistribution; Thu, 12 Aug 1999 12:10:47 +0200 (MET DST) Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id LAA11292 for ; Tue, 3 Aug 1999 11:41:55 +0200 (MET DST) Received: from nenuphar.saclay.cea.fr (nenuphar.saclay.cea.fr [132.166.192.7]) by nez-perce.inria.fr (8.8.7/8.8.7) with ESMTP id LAA05346 for ; Tue, 3 Aug 1999 11:41:53 +0200 (MET DST) Received: from orion.serma.cea.fr (orion.serma.cea.fr [132.166.151.161]) by nenuphar.saclay.cea.fr (8.9.1a/8.9.1/CEAnet-relay-5.0.D20) with ESMTP id LAA00868 for ; Tue, 3 Aug 1999 11:41:54 +0200 (MET DST) Received: from cea.fr (localhost [127.0.0.1]) by orion.serma.cea.fr (8.9.3/8.8.7) with ESMTP id LAA28329 for ; Tue, 3 Aug 1999 11:41:52 +0200 Sender: weis Message-ID: <37A6B960.3AFB0560@cea.fr> Date: Tue, 03 Aug 1999 09:41:52 +0000 From: Patrick Goldbronn - SYSCO Organization: CEA X-Mailer: Mozilla 4.61 [en] (X11; I; Linux 2.2.9-19mdksmp i686) X-Accept-Language: fr-FR, en MIME-Version: 1.0 To: caml Inria Subject: information sur camlidl (passage des tableaux) Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Content-Transfer-Encoding: 8bit Bonjour, J'essaie d'utiliser camlidl pour intégrer une librairie C permettant d'accéder à des fichiers sous le format HDF. La particularité de cette librairie est qu'elle ne fait pas d'allocation mémoire. Lorsqu'on lit un tableau, il faut l'avoir alloué avant et le passer en argument pour le remplir ! Le problème avec camlidl, c'est qu'il transforme le tableau caml en tableau C et qu'il alloue un nouveau tableau caml qu'il remplit avec le tableau C retourné. Peut-on spécifier à camlidl qu'il s'agit en fait du meme tableau et qu'il n'a pas besoin d'en creer un nouveau. Autres remarques : Pourquoi ne pas se servir du fait que les tableaux de double caml sont les "memes" que les tableaux C et ne passer que le pointeur au lieu de dupliquer (comme cela est fait pour les strings !). Peut-on paramétrer camlidl pour qu'il fasse des actions spécifiques selon le type de l'argument ? Par exemple, j'utilise un type caml représentant un tableau de dimensions quelconques contenant un tableau d'entier (les dimensions du tableau) et un bloc avec le tag alloc_final contenant un pointeur vers un tableau C. type float_array = { fvect : float_array_adr ; fdims : int array ; } ;; Je définis une struct C le représentant. struct float_array { double *fvect ; int *fdims ; } Comment dire à camlidl que "int* fdims" et "fdims : int array" doivent etre recopié lorsqu'on passe de caml au C et réciproquement (fonctionnement normal) et que "double *fvect" et "fvect : float_array_adr" ne doivent pas être recopié mais simplement extraire les pointeurs (en tenant compte de l'alloc_final) ? ( si j'ai bien compris la doc et le source générer, cela à voir avec les fonctions ...c2ml... et ...ml2c...) Merci d'avance. PS : Peut-on trouver quelque part des exemples ou des informations supplémentaires sur l'utilisation de camlidl ? -- ##################################### # Patrick GOLDBRONN # # CEA - DRN/DMT/SYSCO # # CE-Saclay, Bâtiment 460 # # 91191 GIF/YVETTE CEDEX (FRANCE) # # # # Tél : 01 69 08 40 66 # # Fax : 01 69 08 96 96 # #####################################