Finalizers and FFI
Gracjan Polak
gracjan at student.uci.agh.edu.pl
Fri Jun 11 10:02:45 EDT 2004
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
>>_UnmapViewOfFile at 4
>>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
More information about the Glasgow-haskell-users
mailing list