Rust言語でDxLibを使う
DxLibはWindows用のゲームなんかを作れるライブラリです。DxLibはC++のライブラリですが、C#用のDLLバージョンも公開されており、C#以外でもFFI(Foreign function interface)が使える言語なら使えます。RustもFFIが使える言語なのでDLL版DxLibを使うことが出来ます。
ただし、DLL版はいくつかの関数が使えません。例えばprintfDxやDrawFormatStringのような可変長引数を使った関数は呼び出し規約がstdcallなため使えません。ですが、普通にゲームを作るだけならあまり困ることは無いと思います。ちなみにstdcall以外を使うよう自分でDLLを作ればこのような制限はありません。
この記事ではRustでDxLibの関数を呼び出し、ウィンドウを出すところまで解説します。
続きを読む「exit code -1073741515」=DLLが見つからない
Windowsプログラミングにおいて、開発環境では問題なく動くプログラムが本番環境で動かない時によくあるのが「exit code -1073741515」です。あるいは16進数の「exit code FFFFFFFFC0000135」だったり、16進数で16bitの「exit code C0000135」だったりします。
これはタイトルの通りDLLが見つからない時のエラーです。見つからないのは大抵コンパイラに付属しているDLLです。開発環境ではコンパイラにパスを通すことが多いため、DLLを用意しなくてもコンパイラのパスからDLLを見つけます。そのため、本番環境で実行して初めて、必要なDLLがあることに気付くのです。当然ですが、このエラーは必要なDLLを一緒に配布すれば解決します。
筆者もC言語やC++言語を使う時は気を付けていたのですが、Rust言語でもGCCのDLLが必要だったとは知らずやらかしてしまいました。
ちなみにGCCは-staticを指定すればDLLが不要になります。