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

わんくま同盟

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

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


■93006 / )  Re[2]: C#でC++DLLコマンドを実行
□投稿者/ サラリーマンZ (5回)-(2019/11/13(Wed) 17:21:56)
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" );
	}

返信 編集キー/


管理者用

- Child Tree -