椿の日記

たぶんプログラムの話をします

2011-01-01から1ヶ月間の記事一覧

スレッドを使ってみる(2)

直接となる原因は分かりませんが、Win32のsleepではなく、Control.Concurrent.threadDelayを使うと、上手くいくようです。 [0,0,0,32769,32768] [32768,32768,32768,32768,32768] [32768,0,0,0,0] [0,0,0,0,0] [0,32769,32768,32768,32768] [0,0,0,0,0]期待…

スレッドを使ってみる

ゲームプログラムでは、メインスレッドからコントローラ入力監視のスレッドを独立させ、短い周期でポーリングし、得られたデータをキューに突っ込んでメインスレッドから扱えるようにすると良いと思います。 とりあえずHaskellでやってみるんで、まずシング…

Text.Regex.Posixがリンクできない

GHCi, version 6.12.3: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer-gmp ... linking ... done. Loading package base ... linking ... done. Loading package ffi-1.0 ... linking .…

MinGWからDirect3D11を呼び出す

色々知らないことが多くて大変でした… 忘れないようにメモを残します。 MinGWのバージョン $ g++ --version g++.exe (GCC) 3.4.5 (mingw-vista special r3) d3d11.hのコンパイルを通す まずコンパイル通すためだけにテスト用のソースを作ります。 // compile…

Haskellの構造体をCと同期させる

Haskellの代数的データ型とCの構造体を通信するためにhsc2hsというツールを使うと便利らしい。次のHogeという構造体でテストしてみた。 サンプルコード // Types.h struct Hoge { uint32_t field; }; -- Types.hsc {-# LANGUAGE ForeignFunctionInterface #-…

HaskellでDirect3D11を使う

最初に断っておくとインチキです。(笑) 純粋にHaskellでCOMインタフェイスを叩いてるわけではないので期待された方すいません。 ポイントはこれだけです。 Direct3D11インタフェイスはC++で叩いてDLL化する Haskellは自分で作ったDLLを呼び出す C++側の実装 …

ポインタで値を受け取る関数のFFI

C言語は、言語の都合上、関数へ渡したアドレスを用いて戻り値を受け取ることがしばしばあります。 extern "C" void ReceivePointer( int* p ) { *p = 100; }これをHaskellで受け取るために、次のような手順をとります。 allocaでスタック上にメモリを割り当…

DLLをHaskellで使う

以前Haskellでiconvでもiconv.dllを使いましたが、今度は自分でDLLを作ってFFIを利用して呼び出してみます。 DLLを作る 自分は、普段はVisualStudioを使ってるので、VS2010でDLLを構築します。 とりあえずWin32プロジェクトでDLLを選択して、以下のような関…

HaskellでWin32メッセージループをPeekMessageで制御してみる

こんどはEsa Ilari Vuokko氏製のDirectXバインディングを使ってみるを見ながらコピペしつつ修正していきます。 とりあえず、PeekMessageを使った後にMSG構造体の中身を見ることになるので、まずはMSG構造体のHaskell版を定義します。 data MSG = MSG { msg_h…

HaskellでWin32プログラミング

少し思い立って、HaskellでWin32プログラミングをするにはどうするんだろう、と思ってやってみました。 こちらのサイトが非常に参考になりましたので参考…というよりほとんどコピペ。 http://d.hatena.ne.jp/Otter_O/20080523/1211527903 {-# LANGUAGE Forei…