Unityで使う C#/DLL マーシャリング事典
- 紙冊子1,000 JPY
- 電子版1,000 JPY
Unity を使っていて、C# で (ネイティブの)DLL を使おうとしたときには、データのマーシャリング(整列処理)が必要になります。通常の .NET framework でのマーシャリング設定は、Web サイトで解説されていることも多いですが、それと同じことを Unity でやろうとすると、様々な罠があります。 Unity を使用している場合は、 .NET framework の場合と違う箇所も多くあるので、Web 上の情報を正しく読み解いて使用するにはとても難しいと思います。 そこでこの本の出番です。 本書は、 Unity において ネイティブ DLL / モジュールを呼び出すのに必要な C# のマーシャリングを解説したものになっています。多くの事例を盛り込んでおり、様々な場面で参考になる事典のようにして使ってもらえたらと考えています。 特に Unity C# から文字列を Windows(DLL) や Android(so) の環境でやりとりしたときに、困ったことのある人は内容に頷いてもらえるかなと思っています。
第2版の特徴
初版に比べ構成を見直して、文字列周辺の理解がしやすくなるよう整備しました。 Android 環境においてのデバッギングについて章を新設し、ネイティブプラグインのデバッガ接続について解説を追加しました。
紙冊子について
技術書典11後、後から印刷というオプションを利用して紙冊子を用意する計画です。紙冊子を希望の方は、「入荷お知らせメールを受け取る」にチェックを入れておいてもらえると、印刷数に考慮できますので、ご協力お願い致します。
目次
A5サイズ 全98ページ 第1章 はじめに 1.1 対象読者 1.2 なぜ マーシャリングが必要になるのか 1.3 この本での前提事項 1.4 動作環境 1.5 禁止事項 1.6 免責事項 1.7 参考文献 第2章 マーシャリング基礎 2.1 マーシャリングとは 2.2 マーシャリングの基本動作 2.3 Blittable と非Blittable 2.4 ネイティブ関数を呼び出す方法 2.5 方向属性(In/Outアトリビュート) 2.6 呼び出し規約 2.7 インターフェースの形式 2.8 大まかな指針 第3章 簡単なマーシャリング 3.1 プリミティブ型:引数にセットして関数呼び出し 3.2 プリミティブ型:引数で結果を受け取る場合 3.3 プリミティブ型:関数戻り値の場合 第4章 構造体のマーシャリング 4.1 構造体の定義 4.2 BOOL/bool型の注意点 4.3 構造体:引数にセットして関数呼び出し 4.4 構造体:引数にセットして関数呼び出し(2) 4.5 構造体:引数で結果を受け取る場合 4.6 構造体:関数戻り値の場合 4.7 構造体:関数戻り値(ポインタ)の場合 4.8 共用体 第5章 配列のマーシャリング 5.1 プリミティブ型:引数関数呼び出し 5.2 プリミティブ型:呼び出し先で配列内容を変更 5.3 プリミティブ型:戻り値の場合 5.4 構造体配列:引数関数呼び出し 5.5 構造体配列:呼び出し先で配列内容を変更 第6章 文字列の表現 6.1 Windows開発環境の文字エンコーディング 6.2 LinuxやAndroid、iPhoneの場合 6.3 .NET FrameworkとMonoの実行系による違い 6.4 Monoによる文字列引数の呼び出しを観察する 6.5 実行ランタイム違いへの対策 6.6 Win32APIの呼び出しについて 第7章 文字列の変換 7.1 文字列をShift-JISのバイト列へ変換 7.2 Shift-JISのバイト列から文字列へ変換 7.3 文字列をUTF-8のバイト列へ変換する場合 7.4 文字列をUTF-16のバイト列へ変換する場合 7.5 文字列をUTF-32のバイト列へ変換する場合 7.6 UTF-32のバイト列から文字列へ変換 7.7 IntPtrのデータ先の長さを求める 7.8 IntPtr(UTF-8バイト列)からの文字列化 7.9 IntPtr(UTF-16バイト列)からの文字列化 7.10 IntPtr(Shift-JISバイト列)からの文字列化 7.11 IntPtr(UTF-32バイト列)からの文字列化 7.12 メモリーの割り当てに関する注意事項 第8章 文字列のマーシャリング 8.1 文字列型:引数にセットして関数呼び出し 8.2 文字列型:引数で結果を受け取る場合 8.3 文字列型:引数で結果を受け取る場合(2) 8.4 文字列型:関数戻り値の場合 8.5 文字列配列型:引数関数呼び出し 8.6 文字列配列型:呼び出し先で配列内容を変更 第9章 上級マーシャリング 9.1 ビットフィールドを使用している場合 9.2 プリミティブ型の2次元配列の場合 9.3 構造体中に構造体がある場合 9.4 構造体中に配列(固定長)がある場合 9.5 構造体中に配列(可変長)がある場合 9.6 構造体中に文字列(固定長)がある場合 9.7 構造体中に文字列(固定長)がある場合(2) 9.8 構造体中に文字列(可変長)がある場合 9.9 構造体中に文字配列がある場合 9.10 C# の関数を DLL に渡す場合 9.11 DLL 関数から関数ポインタが返る場合 9.12 DLL関数から関数ポインタが返る場合(2) 9.13 構造体中に関数ポインタがある場合 付録A Android Native Debugging A.1 環境の準備 A.2 シンボル付きで .so をビルド A.3 デバッグの手順 (GDB) A.4 デバッグの手順 (LLDB) A.5 まとめ あとがき