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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.93268 の関連記事表示

<< 0 >>
■93268  Re[12]: C#でC++DLLコマンドを実行
□投稿者/ サラリーマンZ -(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);
    }
記事No.92947 のレス /過去ログ161より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -