| 何度も質問してすいません。 C#でC++/CLIのDLLをなんとか読み込んで関数実行させようとしています。
参考にしているC++/CLIプログラムでは ConnectParameter CP; と構造体の名前を定義して そのCPの構造体の中にさらに sockaddr_in my と sockaddr_in dst の構造体が存在しているようなので 下記のように構造体ConnectParameterの中でsockaddr_in my とsockaddr_in dstの宣言をしたのですが CP.my.sinaddr = のようにメンバを指定してあげようとすると、アクセスできない保護レベルになっている というエラーになってしまいます。 構造体の中でさらに構造体を宣言するにはどうしたらよいのでしょうか?
ConnectParameter CP;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct ConnectParameter { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string Addr1; public int Port1; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string Addr2; public int Port2;
//sockaddr_inの定義 struct sockaddr_in { public ushort sin_family, sin_port; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public byte[] sin_addr; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] public byte[] sin_zero; }
sockaddr_in my; sockaddr_in dst;
}
//コマンド実行 private void button1_Click(object sender, EventArgs e) { CP.Addr1 = "192.168.1.2"; CP.Port1 = 9999; CP.Addr2 = "192.168.1.1"; CP.Port2 = 9999;
CP.my.sin_addr = IPAddress.Parse(CP.Addr1).GetAddressBytes(); CP.dst.sin_addr = IPAddress.Parse(CP.Addr2).GetAddressBytes();
Connect(CP); } |