私は、Windowsでユーザーがキーを押すたびに応答したい小さなHaskellゲームを作っています。 Windows上でgetChar
behaves strangelyがWindows上にあるため、hereと記載されているように、conio.h
のgetch
にFFIを使用してアクセスします。関連するコードは次のとおりです。カタル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
の下にinclude
ディレクトリの下にconio.h
というファイルがありますが、オブジェクトコードを提供するファイルは他にはありません。conio
です。
私は正しい方法でこれをやっていますか?もしそうなら、キャブファイルにどのライブラリを含めるべきですか?
conio機能を提供する様々なライブラリがあります。あなたは 'Extra-Libraries:crtdll'または' Extra-Libraries:msvcrt'を試しましたか?ちなみに、MSDNによると、 'getch'の代わりに' _getch'を使うべきですが、ヘッダーファイルがそれを行うかもしれません。 –
これはWindowsのghc/ghciにのみ影響し、特にWinHugsではソリューションコードが機能しないため、特にWindows/ghcの場合のみコンパイルする必要があることに注意してください。 – AndrewC
@Tinctorius私は 'Extra-libraries:msvcrt'と' Extra-libraries:crtdll'だけを組み合わせて試しました。 'cabal build'の出力は変更されませんでした。 Visual Studioのインストールの下で 'msvcrt.lib'と' crtdll.c'を見つけて、それらを私のフォルダにコピーしましたが、何も変わっていませんでした。 – Boris