Hey!
I' having problems to call functions from a DLL made with ghc 
with a C++ program, using Microsofts Visual C++
To learn how to do it, I tried the example found at 
the user's guide (11.3, 11.4), but things aren't working out.. 
Here is as far as I've done:
I have a haskell module, MyModule.hs:module 
MyModule where
foreign export stdcall fac :: Int -> 
Int
fac :: Int -> Int
fac n
 | n <= 0  = 
1
 | otherwise  = n * fac(n-1)
I compile it with:  ghc -c 
MyModule.hs -fffi
 
The .c file, containing the DLL initialization 
is:
#include <windows.h>
#include <Rts.h>
extern void __stginit_MyModule(void);
static char *args[] = {"MyDll", NULL};
BOOL STDCALL DllMain(HANDLE hModule, DWORD reason, 
void *reserved){
    int i;
    if(reason == 
DLL_PROCESS_ATTACH){
        
printf("\nStarting Haskell");
        
startupHaskell(1, args, __stginit_MyModule);
        
printf("Haskell Started!!");
        return 
TRUE;
    }
return TRUE;
}
 
Which I compile with:  ghc -c MyDll.c
I build the DLL with:  ghc 
--mk-dll -o MyDll.dll MyModule.o MyModule_stub.o MyDll.o
The DLL is build, and following the example, I try 
to call it from VB, but the program hangs. I don't know if I'm missing something 
in the building process, I can't see what it can be.
Moreover, for calling it from my C++ programs, I 
need a library file (generally called .lib in MSVC linker, I think it's 
equivalent to the libMyLib.a of gcc) to resolve the function (fac) when 
linking. I tried to use 
dlltool -b MyDll.dll -l 
MyDll.lib
to contruct the .lib file, it's contructed, but 
yet, when I use to link my C++ program with the DLL, i got unresolved external 
symbol for the function.
Thus, I can't even link the C++ program.
Note that I used the stdcall (for fac)to follow the example; I tried even 
with ccall, but without success either.
Can someone see if I'm missing something at 
the creation process of the dll? And to create the library file, is it the right 
thing to do?