Krasimir Angelov wrote:
The problem here is that the external functions (instances of type FunPtr) are always executed with ccall convention regardless of stdcall declaration in the foreign import. The workaround is to write simple stub function in C with ccall convention.
You are right, I did not think about that. I would expect at least a warning from compiler in this case.
Compilation with stub function produced perfect result. It worked.
As far as I know ia32 assembly the only thing that the stub does is something like:
subl <needed_stack_space>, %esp
This could be made automagicaly by GHC... OK, enough ranting :)
Other question: having myPtr :: FunPtr Int, how do I call it from Haskell? Is there a way to just invoke function pointer?
Warnings in compilation are also strange:
$ ghc -package win32 --make interlvIO.hs -o interlvIO.exe Chasing modules from: interlvIO.hs Compiling Main ( interlvIO.hs, interlvIO.o ) Linking ... Warning: resolving _UnmapViewOfFile by linking to [EMAIL PROTECTED] Use --enable-stdcall-fixup to disable these warnings Use --disable-stdcall-fixup to disable these fixups
Try to use -fvia-C to avoid the warnings. When the program is compiled via the native code generator then windows.h isn't included and this causes the problem.
-fvia-C removed warnings but the program crashes anyway without hand written stubs. At first I thought that those "stdcall-fixups" were in fact "stdcall to ccall" wrappers. OK, nevermind.
-- Pozdrawiam, Regards, Gracjan _______________________________________________ Glasgow-haskell-users mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/glasgow-haskell-users