C#で宣言したIntPtr構造体にC++で作成したデータのアドレスを入れたいです。
C++
1 public value struct StructTest { 2 public: 3 int a; 4 int b; 5 int c; 6 }; 7template <class XW> inline void TEST::SetTempPtrToPointer(IntPtr var1, XW &var2) 8{ 9 var2 = (XW)(void *)var1; 10} 11 12void TEST::SetPtr(IntPtr WPtrP) 13{ 14 StructTest P; 15 P.a = 1; 16 P.b = 2; 17 P.c = 3; 18 19 WPtrP = (IntPtr)&P; 20} 21 22void TEST::ChkPtr(IntPtr WPtrP) 23{ 24 StructTest* P; 25 SetTempPtrToPointer(WPtrP, P); 26 27 int ia = P->a; 28 int ib = P->b; 29 int ic = P->c; 30} 31
C#
1 2 IntPtr WIntPtrTest = System.Runtime.InteropServices.Marshal.AllocHGlobal(System.Runtime.InteropServices.Marshal.SizeOf(8)); 3 TEST.SetPtr(WIntPtrTest); 4 TEST.ChkPtr(WIntPtrTest); 5
ia,ib,icに1,2,3と入れたいのですが、1448869888等のおかしな値しか入りません。
Marshal::AllocHGlobal メソッドに、「プロセスのアンマネージ メモリからメモリを割り当てます。」
と説明があるので、ヒープのマネージ領域を確保しないといけないのかと思ったのですが、うまく実装できません。
どのように確保すれば良いでしょうか。
環境はWin10のVS2017です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/02 10:01 編集