| Hongliangさん、ご丁寧に回答頂き誠に有難う御座います。
C++ DLL作成者に問い合わせたところ、コマンド実行のために my / dst の指定は必要とのことで、
Hongliangさんご察しの通りでした。
struct sockaddr_inの定義コード有難うございます。
参考にさせていただきます。 ↓下記のようなコードでとりあえず試してみます。
//ConnectParameterの定義
[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;
}
//コマンド実行
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;
my.sin_addr = IPAddress.Parse(CP.Addr1).GetAddressBytes();
dst.sin_addr = IPAddress.Parse(CP.Addr2).GetAddressBytes();
Connect(CP);
}
struct sockaddr_in の中身としてsin_family / sin_port / sin_addr / sin_zero とありますが、
sin_addr だけでなく、sin_family や sin_port も指定してあげないと
うまく動作しない感じでしょうか。。。
>>Connect(struct ConnectParameter CP);
> 結局
>>C++ のところ、*が付いていました。
> は勘違いということで良いんですかね?
Connect(struct ConnectParameter CP)に関しては、*付いていませんでした。
勘違いでした。。。 混乱させて申し訳ありません。
|