
Hi there! I'm trying to FFI-bind a MS Visual dll (under Windows2000) to a Haskell program. I have this little C(++) dll: ******* FILE inc.h: START ******* extern "C" { int pten(int i); } ******* FILE inc.h: END ******* ******* FILE inc.cpp: START ******* #include "inc.h" int pten(int i) { return i+10; } ******* FILE inc.cpp: END ******* ******* FILE cproj1.def: START ******* LIBRARY cproj1 EXPORTS pten ******* FILE cproj1.def: END ******* And this little Haskell program: ******* FILE testFFI_2.hs: START ******* {-# LANGUAGE ForeignFunctionInterface #-} module Main where import Foreign.C -- get the C types foreign import ccall unsafe "pten" c_pten :: CInt -> CInt plus10 :: Int -> Int plus10 i = fromIntegral (c_pten (fromIntegral i)) main = print (map plus10 [1..10]) ******* FILE testFFI_2.lhs: END ******* Using information found at paragraph 1.4.3.4 of http://www.haskell.org/haskellwiki/GHC:FAQ#GHC_on_Windows I do the following:
dlltool -d cproj1.def -l libcproj1.a ghc --make testFFI_2.hs -optl-lcproj1 -optl-L.
This seems fine, since it produces a "testFFI_2.exe". However, executing it, I get a MSWindows error box with a message that looks like (approximate translation): "DLL (null) not found on specified path" At first, I didn't have the "LIBRARY" directive in the ".def" file, so I thought that was the reason for the "(null)" appearing in the message. But adding said directive didn't change anything... [I've checked that my MSVisual dll was in current dir, and that this dir was in the search paths showed in the error box] Can anyone enlighten me? Thanks in advance. --Serge

Serge LE HUITOUZE wrote:
I do the following:
dlltool -d cproj1.def -l libcproj1.a ghc --make testFFI_2.hs -optl-lcproj1 -optl-L.
This seems fine, since it produces a "testFFI_2.exe". However, executing it, I get a MSWindows error box with a message that looks like (approximate translation): "DLL (null) not found on specified path"
At first, I didn't have the "LIBRARY" directive in the ".def" file, so I thought that was the reason for the "(null)" appearing in the message. But adding said directive didn't change anything...
dlltool -d cproj1.def -l libcproj1.a -D cproj1.dll
participants (2)
-
kyra
-
Serge LE HUITOUZE