从64位haskell到64位windows dll的FFI导致访问冲突

时间:2014-10-22 01:06:04

标签: windows haskell dll 32bit-64bit ffi

我正在运行Windows 7(64位) 使用Haskell的版本2014.2.0.0(64和32位)。

使用32位dll和32位Haskell程序,这很好用 使用64位dll和64位Haskell程序时,这不起作用。相反,我得到了访问冲突。

First-chance exception at 0x0000000000000000 in TestInterop.exe:
0xC0000005: Access violation executing location 0x0000000000000000.

c ++代码(内置为64位dll):

BOOL __stdcall DllMain(HINSTANCE, DWORD, void*)
{
    return TRUE;
}

extern "C" __declspec(dllexport)  uint64_t ReverseDigits(uint64_t number)
{
    uint64_t result = 0;
    while (number)
    {
        result *= 10;
        result += number % 10;
        number /= 10;
    }
    return result;
}

Haksell 代码

module Main where
import Foreign.C
foreign import ccall unsafe "ReverseDigits" interopReverseDigits :: CULLong -> IO CULLong

main = do
    x <- interopReverseDigits(1234)
    if x == 4321
        then putStrLn "Successfully Called Test"
        else putStrLn "Call to test failed"</code></pre>

我是否需要在Haskell中执行某种特殊操作才能使其正常工作?

0 个答案:

没有答案