[Haskell-beginners] How do I marshall a pointer over SendMessage LPARAM or WPARAM?
Simon Peter Nicholls
simon at mintsource.org
Wed Jul 18 15:14:46 CEST 2012
I'm new to Haskell, and have had some good success with FFI so far,
but using Win32's sendMessage to send a pointer in LPARAM or WPARAM is
resulting in access violations at the other end.
Is there some issue with my pointer conversions? Am I hitting some
restriction, or missing some compiler options?
It's driving me pretty crazy, after a very nice start to using Haskell.
Some "sending" code:
Foreign.C.String.withCWString "frustrator" $ \s -> do
let wParam = System.Win32.Types.castPtrToUINT s ::
System.Win32.Types.WPARAM
Graphics.Win32.sendMessage wnd Graphics.Win32.wM_APP wParam 0
wndProc "receiving" code:
| wmsg == Graphics.Win32.wM_APP = do
s <- peekCWString $ System.Win32.Types.castUINTToPtr wParam
putStrLn s
return 0
The string will not be seen.
Some extra notes:
I can get wndProc messages and integral data generally.
The pointer values match textually at both ends when "shown" to stdout.
At the sending side I can pass the CWString to a regular FFI function
call just fine, and castUINTToPtr will give me back a functioning Ptr
for that call.
I have also tried sending to & receiving from a working C++ program,
without success. Access violations are reported when receiving, though
again the address matches up. Silence from Haskell as before, when C++
is sending.
I found someone else having an issue here:
http://osdir.com/ml/haskell-cafe@haskell.org/2009-11/msg00731.html but
no solution unfortunately.
More information about the Beginners
mailing list