我正在运行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中执行某种特殊操作才能使其正常工作?