読者です 読者をやめる 読者になる 読者になる

むずかしいことはわかりません

いろいろ書いてるみたいな

C++で作ったDLLをUnityから呼び出すに当たって設定するのめんどくさいって話

C#(Unity)側でやること

static extern をつけなくてはいけない。
DllImport は using System.Runtime.InteropServices; すること
IntPtr は using System; すること

C++(DLL)側でやること

extern "C" { } でCのスタイルでリンクする

VisualStudio Community 2013では、デフォルトでDLLを作るとWindows8.1とWindowsPhone用のファイルを作ろうとするので、Win32のウィザードを起動してDLL作る設定にする

 

[141127追記]

C++の構造体をC#で受け取る方法というか、IntPtrを受け取ったあとにそれをどういう形で処理するかっていう話で結局Marshalが一番現実的かという話なんだけど


ポインタ(バイト配列)から構造体への変換 - schima.hatenablog.com

 

 C++側のポインタにアクセスする場合はC#側はIntPtrを使う

Marshal.PtrToStructureを使うことで、あんまり考えなくてよくなった。

 

floatのバイト数がC++C#で違うかどうか → http://www.kumei.ne.jp/c_lang/cs/cs_05.htm

 C++側のfloatを取り出してもC#側では、ふつーに表示されていたので、問題なさそう