English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2006-11-16 (12:02)
From: Matthieu Dubuget <matthieu.dubuget@l...>
Subject: caml_startup/caml_cleanup

I have a problem related to memory allocated by caml_startup. (May
push toward a caml_cleanup function as proposed there for another
reason http://caml.inria.fr/mantis/view.php?id=385).

If you have any advice to help me solve this, please, send it to me!

Using OCaml I have written two DLLs (Windows). Let's call them A.dll
and B.dll.

I use them from LabVIEW (National Instrument). But that's not the key
point: see later.

LabVIEW automatically loads the libraries when I open a LabVIEW
program using them, and unload the libraries when the program is
closed. I can check that by adding a DllMain C function in my DLL,
with appropriate MessageBox.

With A.dll, I experience no problem at all, and it works fine.

B.dll also works fine. But under some conditions, AFTER B.dll has been
unloaded, LabVIEW crashes.

- Only if caml_startup was called (and also if this was the only
  function called from the library)

- I experience this with B.dll only. Not A.dll. I'm going to narrow
  the problem by removing functionnalities from B.dll step by
  step. But I would like to avoid this, because it will be long.

- If B.dll is produced with :
  * MSVC and OCAML MSVC 3.08.3, I just experience a crash
  * with  MSVC and OCAML MSVC 3.09.3,
    or    mingw gcc and ocaml mingw (3.09.3 or 3.08.3)

    I get a windows error:

    FRENCH: L'instruction à "0x....." emploie l'adresse mémoire
    "0x...". La mémoire ne peut être "read".

    APROXIMATIVE TRANSLATION: The instruction at "0x..." use memory
    address "0x...". The memory can not be read.

- Why did I said that LabVIEW is not the problem?

    - Because we reproduced the problem loading and unloadind B.dll in

    - Because I experienced the problem another way: I did a little C
      program that load/unload B.DLL and exits. This program was run
      from an *eshell* emacs session. And after that. I experienced
      the window error box when calling another program (It was

Thanks in advance for any help.