###実現したいこと
C#にて構造体(値型)からポインター(IntPtr)を取得して、ポインター(IntPtr)を保持しておき
構造体(値型)の内容を変化させた後に、ポインター(IntPtr)の値から変更後の結果を受け取る方法を探しています。
###試してみた内容
C#
1public class ClassInfo 2{ 3 [Serializable] 4 public struct Info 5 { 6 public int state; 7 } 8 9 public Info m_Info; 10 11 public IntPtr m_Ptr; 12 public int m_Size; 13 14 public ClassInfo() 15 { 16 // stateを1に変更する 17 info.state = 1; 18 19 // 構造体からポインターを取得する 20 m_Size = Marshal.SizeOf(typeof(Info)); 21 m_Ptr = Marshal.AllocCoTaskMem(m_Size); 22 Marshal.StructureToPtr(info, m_Ptr, false); 23 } 24 25 public Update() 26 { 27 // stateを変更する 28 m_Info.state++; 29 30 // ポインターから復元する 31 Info info; 32 IntPtr ptr = Marshal.AllocHGlobal(m_Size); 33 Marshal.StructureToPtr(info, ptr, false); 34 35 // ここで上記で復元したinfo.stateが++されて2になった状態で取得したい 36 37 // 解放しておく 38 Marshal.FreeCoTaskMem(m_Ptr); 39 Marshal.FreeCoTaskMem(ptr); 40 } 41}
###補足情報
クラス(参照)ではなく構造体(値型)を使用している理由は、
構造体の内容をbyte配列化して通信データとして外部に送信する必要がある為です。
AllocHGlobalでメモリーを確保して、確保したメモリーに構造体の内容をStructureToPtrで代入している為
構造体と確保したメモリーの内容が別物になっている事が原因だと考えているのですが、
構造体自身のポインターを取得する方法、または変更後の結果をポインターから取得出来る方法があれば
ご教授頂けますと幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。