From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id SAA18685; Thu, 17 Jan 2002 18:47:51 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f 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 SAA18643 for ; Thu, 17 Jan 2002 18:47:50 +0100 (MET) Received: from relay-4v.club-internet.fr (relay-4v.club-internet.fr [194.158.96.115]) by nez-perce.inria.fr (8.11.1/8.11.1) with ESMTP id g0HHlof29653 for ; Thu, 17 Jan 2002 18:47:50 +0100 (MET) Received: from warp (lns02v-1-41.w.club-internet.fr [212.194.24.41]) by relay-4v.club-internet.fr (Postfix) with SMTP id C6C321871; Thu, 17 Jan 2002 18:47:47 +0100 (CET) Message-ID: <01ca01c19f7e$a566fbd0$ac00a8c0@warp> From: "Warp" To: "Jeff Henrikson" Cc: "OCaml" References: <000901c19ecf$b8c93ee0$0b01a8c0@mit.edu> Subject: Re: [Caml-list] Type hidding Date: Thu, 17 Jan 2002 18:44:42 +0100 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.50.4133.2400 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk Ok I've tried this doing : (set_window_data wnd#hwnd 10); let v = (get_window_data wnd#hwnd) in (print_int (Obj.magic v: int)); But it print a wrong number ( not 10 ) I've tried to trace calls into the C DLL where primitives *_window_data are, I can see the set_window_data call but the get_window_data call is NOT done by the interpreter What's wrong ? Warp > Do you know about Obj.magic? It unsafely casts anything to the unlimited polymorphic type, so you can cast to something else: > > (Obj.magic x : int) > > casts x to an int no matter what. Note that this does not help you at all if you are using the least significant bit, which is > reserved for pointer tracing in ocaml. If you bind bind something arbitrary with a 0 lsb to an ocaml variable, you run the risk of > GC running off the end of the earth tracing that. You are supposed to convert the variable to an int32 or something else in C > before returning it to caml. See the FFI docs. > > > Jeff > > > Hello ! > > I'm having theses functions : > > > > external set_window_data : wnd:hwnd -> 'a -> unit = "set_window_data" > > external get_window_data : wnd:hwnd -> 'a = "get_window_data" > > > > I know that's very type-unsafe and all, but i really need the user to be > > able to put any kind of data into it. If you got another idea, please let me > > know. > > > > BTW, then with my handle i'm doing that : > > (set_window_data wnd 0); > > (print_int (get_window_data wnd)); > > > > but it raises (about the call the get_window_data ) : > > This expression has type wnd:hwnd -> 'a but is here used with type int > > > > I've tried to "force" the return value to int but it doesn't seems to work. > > Any help welcomed. > > > > Warp > > > > ------------------- > > 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 > > > > ------------------- 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