我正在嘗試編寫一個模擬Windows上的按鍵的Haskell程序。我試圖調用keybd_event和SendInput,但都沒有編譯。不過,我可以和解釋器一起運行程序。當我嘗試它包含一個winable.h結合SendInput時籌建方案,我得到的錯誤:在Windows上模擬與Haskell的按鍵
cabal install
...
[1 of 2] Compiling WindowsKeys (dist\build\WindowsKeys\WindowsKeys-tmp\WindowsKeys.hs, dist\build\WindowsKeys\WindowsKeys-tmp\WindowsKeys.o)
[2 of 2] Compiling Main (src\Main.hs, dist\build\WindowsKeys\WindowsKeys-tmp\Main.o)
Linking dist\build\WindowsKeys\WindowsKeys.exe ...
dist\build\WindowsKeys\WindowsKeys-tmp\WindowsKeys.o:fake:(.text+0x35d): undefined reference to `SendInput'
collect2: ld returned 1 exit status
cabal: Error: some packages failed to install:
WindowsKeys-0.1.0.0 failed during the building phase. The exception was:
ExitFailure 1
的詳細的錯誤是在http://pastebin.com/trg21N0x,但它似乎並沒有包含任何更多的線索。當我嘗試使用keybd_event
時,出現類似錯誤。 我寫的HSC文件包括這些標題:
#include "windows.h"
#include "winuser.h"
#include "winable.h"
這裏是C語言綁定:
foreign import ccall unsafe "winable.h SendInput"
c_SendInput :: UINT
-> Ptr Input
-> CInt
-> IO UINT
我認爲我不能在WINUSER.H調用SendInput
因爲在#if的:
#if (_WIN32_WINNT >= 0x0403)
WINUSERAPI UINT WINAPI SendInput(UINT,LPINPUT,int);
當我添加用於_WIN32_WINNT
的結合,則該值爲0×400。
我有Haskell平臺版本2012.4.0.0。它帶有一個包含我包含的頭文件的文件夾。我無法在計算機上找到其他名稱相同的其他標頭。我正在使用Windows 7 Professional,版本6.1。
謝謝!
這裏是WindowsKeys.cabal:當我註釋掉綁定到鍵盤功能
-- Initial WindowsKeys.cabal generated by cabal init. For further
-- documentation, see http://haskell.org/cabal/users-guide/
name: WindowsKeys
version: 0.1.0.0
build-type: Simple
cabal-version: >=1.8
extra-source-files: windows.h, winuser.h, winable.h
executable WindowsKeys
main-is: Main.hs
other-modules: WindowsKeys
build-depends: base ==4.5.*, Win32 ==2.2.*
hs-source-dirs: src
build-tools: hsc2hs
extra-libraries: user32
include-dirs: src
構建成功。
你想綁定到一些庫嗎?如果是這樣,什麼庫,以及你如何告訴GHC在哪裏找到它? '* .cabal'中有什麼? –
我想綁定到Windows上的user32庫。我用.cabal文件更新了我的問題。 – user2917747