C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■93268 / )  Re[12]: C#でC++DLLコマンドを実行
□投稿者/ サラリーマンZ (10回)-(2019/12/01(Sun) 16:26:00)
何度も質問してすいません。
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);
}
返信 編集キー/


管理者用

- Child Tree -