GCCでDXライブラリを使用してみる
GCCでDXライブラリを使用できるか試してみたのでメモしてみます。
(記述に誤りを見つけたらお教えください)
DXライブラリはVC++/BCC用の静的リンクなライブラリが配布されていてますが、この他にC#用のライブラリも公開されていて、これに同梱されているDxLib.dllを利用すれば他の開発環境からもからもいじくれるっぽいです。
以下、初期化関数のDxLib_Initを利用する手順。
- DxLib.dllをdumpbin /exportsかDependency Walker*1に喰わせて装飾名を確認すると、初期化関数のDxLib_Initは_dx_DxLib_Init@0という名前で公開されていることがわかる。
- CからはLoadLibraryとGetProcAddressを使って、
HMODULE h = LoadLibrary("DxLib.dll");
int (__stdcall *DxLib_Init)(void); // 関数ポインタ
DxLib_Init = GetProcAddress(s_hm, "_dx_DxLib_Init@0");
みたいな雰囲気で書けば、DxLib_Init();を実行できるようになります。
Cygwin+GCCでもMinGWでも適当にコンパイルすれば動きます。
http://members.jcom.home.ne.jp/wtetsu/diary/d20070112.zip
-
-
- -
-
めも。
DxLib.dllはもともとVC++(またはC#等、他のMicrosoft環境?)で利用するためのものっぽい雰囲気で、具体的には関数が@混じりの変な名前で公開されている。たとえばChangeWindowModeは、DLLでは_dx_ChangeWindowMode@4という名前で公開されている。
これはC++のオーバロード機能のためにコンパイラが勝手に付けている名前だが、この規則はコンパイラ依存になるため厄介(ちなみに@の後ろの数字は引数のバイト数)
前述の手順では、DxLib.dllの公開名を自力で探して、GetProcAddressするという手順をとっているが、他にも
- DXライブラリのソースから、装飾名が付かないようにDLLをビルドする
- DxLib.dllの関数を右から左に受け流すラッパDLLをVCで作る(当然、装飾名が付かないように)
という手もありえると思います。