我在Windows制作小Haskell的游戏,在这里我想给每个用户按下某个键时做出响应。由于getChar
behaves strangely在Windows上,我用FFI获得在conio.h
访问getch
,如所描述here。相关的代码是:阴谋FFI依赖
foreign import ccall unsafe "conio.h getch" c_getch :: IO CInt
这工作得很好,当我在ghci中运行它,或者用GHC编译。我也想尝试做一个小集团包出来的,所以从this问题扩展,包括我在我的阴谋文件中的以下内容:
...
executable noughts
Includes: conio.h
Extra-libraries conio
...
但是当我运行cabal configure
,它告诉我:
cabal: Missing dependency on a foreign library:
* Missing C library: conio
它是有道理的,因为在我的haskell平台目录下,在...\Haskell Platform\2012.4.0.0\mingw
下有一个conio.h
文件,在include
目录下没有其他conio
文件提供目标代码。
难道我这个做了正确的方式,如果是这样,我怎么能找到我的阴谋文件,包括库?
有迹象表明,提供conio功能的各种库。你有尝试'额外的图书馆:crtdll'或'额外的图书馆:msvcrt'?顺便说一下,根据MSDN,你应该使用'_getch'而不是'getch',但是头文件可能会为你做。 – 2012-11-24 19:42:29
请注意,这只会影响Windows中的ghc/ghci,而且解决方案代码在WinHugs中并不适用,所以您只需要在Windows/ghc中编译时使用它。 – AndrewC
@Tinctorius我刚刚尝试过'Extra-libraries:msvcrt'和'Extra-libraries:crtdll'单独和组合。它没有改变'cabal build'的输出。我在我的visual studio安装下找到了'msvcrt.lib'和'crtdll.c',并将它们复制到我的文件夹中,但它没有改变任何东西。 – Boris