How to access hs_free_fun_ptr from a Visual Studio DLL
Brian Hulley
brianh at metamilk.com
Sat Mar 25 14:00:35 EST 2006
Hi -
I've found a workaround to the problem below: instead of trying to use
hs_free_fun_ptr, I instead pass a FunPtr to the Haskell function
freeHaskellFunPtr into my DLL, and use this to free everything, finally
using it to free itself (!) which I assume should be safe.
Thus there is no need to try to link against hs_free_fun_ptr (or
hs_free_stable_ptr which can be obtained by wrapping
Foreign.StablePtr.freeStablePtr)
Regards, Brian.
PS: as an aside, it is interesting to note the strange naming for
Foreign.Ptr.freeHaskellFunPtr (why the "Haskell"?) as opposed to
freeStablePtr... :-)
Brian Hulley wrote:
> Hi -
> I have the following declaration and code in part of a DLL I'm
> writing:
> extern "C" {
> typedef void (*HsFunPtr)();
> extern __declspec(dllimport) void hs_free_fun_ptr(HsFunPtr fp);
> }
>
> enum ECallback { ECallback_Render, ECallback_COUNT};
>
> HsFunPtr callback[ECallback_COUNT];
>
> void SetCallback(ECallback c, HsFunPtr fp){
> if (callback[c]){
> hs_free_fun_ptr(callback[c]);
> }
> callback[c] = fp;
> }
>
> However when I try to build the DLL, I get the following error from
> Visual Studio:
>
> Duma.obj : error LNK2019: unresolved external symbol
> __imp__hs_free_fun_ptr
>
> So the problem is that the VS is adding __imp__ onto the function
> name even though I've specified it as extern "C" and is moreover just
> ignoring the dllimport directive and complaining that it can't find
> the function.
> I've also tried deleting the "extern" before the "__declspec" but this
> doesn't make any difference. Also, I've tried putting hs_free_fun_ptr
> into the IMPORTS section of the def file but this doesn't make any
> difference either (I don't even think def files have an IMPORTS
> section so it's probably just being ignored).
>
> I've got a horrible feeling that VS will need a .lib file for ghc to
> allow it to link against hs_free_fun_ptr but I don't have a clue how
> to generate one...
>
> Does anyone know how I can get everything to link?
>
> Thanks, Brian.
>
> _______________________________________________
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users at haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
More information about the Glasgow-haskell-users
mailing list