| Hongliangさんの回答を参考に下記プログラムを作成してみましたが、
うまく通信ができませんでした。↓
要因が今のところ分かりません。
//構造体の宣言
ConnectParameter CP = new ConnectParameter();
//DLL実行コマンドのインポート
[DllImport("ConnectionDLL.dll", CallingConvention = CallingConvention.Cdecl)]
extern static int Connect(ConnectParameter CP);
//CPの中身 入力
CP.Addr1 = "192.168.1.1";
CP.Addr2 = "192.168.1.2";
CP.Port1 = 9999;
CP.Port2 = 9999;
//通信コマンド実行
Connect(CP);
もともと、C++の実行プログラム(↓)でしたら問題なく動作するので
C#プログラム(↑)のところがおかしいような気がするのですが、
どなたか気付かる点、ありましたら教えてください。
WSADATA wsadata;
int rc;
rc = WSAStartup( 0x0101, &wsadata );
if( rc != 0 )
{ return; }
sprintf_s( CP.Addr1, "%s", "192.168.1.1" );
CP.Port1 = 9999;
sprintf_s( CP.Addr2, "%s", "192.168.1.2" );
CP.Port2 = 9999;
//ここで入力するとDLLでのエラーを回避できる(DLL内ではコピーするだけ)
try
{
LPHOSTENT PC_lpHost = gethostbyname(CP.Addr1 );
CP.my.sin_family = AF_INET;
CP.my.sin_addr = *((LPIN_ADDR*PC_lpHost->h_addr_list); CP.my.sin_port = htons( CP.Port1 );
LPHOSTENT MP_lpHost = gethostbyname(CP.Addr2 );
CP.dst.sin_family = AF_INET;
CP.dst.sin_addr = *((LPIN_ADDR*PC_lpHost->h_addr_list); CP.dst.sin_port = htons( CP.Port2 );
}
catch(...)
{
MessageBox::Show( "エラー" );
return;
}
//Open
int Ans;
try
{
Ans = Connect(CP);
}
catch(...)
{
Ans = -1;
}
//Status
if( Ans == 0 )
{
MessageBox::Show( "接続 OK" );
}
else
{
MessageBox::Show( "接続 NG" );
} |