C#をC++に書き換えたい

解決


扉たたき  2008-04-29 03:09:55  No: 68214

Visual Studio 2005
C++/CLI

[http://www.atmarkit.co.jp/fdotnet/special/networkprog/networkprog_03.html]
ここに載っているサンプルプログラム(C#)を、C++に書き換えようと思い
進めていたのですが、

//スレッドとしてクライアントからの通信を処理する部分を実行
threadServer = new Thread(new ThreadStart(ServerListen));

これを
threadServer = gcnew Thread(gcnew ThreadStart(ServerListen()));

と書き直してエラー。

error C3364: 'System::Threading::ThreadStart' : 
delegate コンストラクタの引数が無効です。
デリゲート ターゲットはメンバ関数のポインタである必要があります。

ThreadStartは引数が必要のようですが、でもC#のほうは引数なしでも
エラーはありませんし・・・。C#とC++の違いなのか?
ServerListen()は、何を返せばいいのでしょうか。
それとも問題は別のところにあるんでしょうか?
よろしくお願いします。


Blue  2008-04-29 03:26:38  No: 68215

http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200803/08030011.txt
でも回答しましたが、C#と違ってC++/CLIではstaticでないメンバ関数をデリゲードとして指定するときは
インスタンスの指定が必要となります。

>threadServer = gcnew Thread(gcnew ThreadStart(ServerListen()));

ServerListenがForm1のメンバ関数であれば

threadServer = gcnew Thread(gcnew ThreadStart(this, &Form1::ServerListen));

となります。

参考
http://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=1236421&SiteID=7
http://madia.world.coocan.jp/vc/vc_bbs/200709/200709_07090027.html


扉たたき  2008-05-01 22:17:25  No: 68216

Blueさん、前回に続きありがとうございます。

threadServer = gcnew Thread(gcnew ThreadStart(this, &Form1::ServerListen));

で、無事エラーは消えました。

ビルドは通るんですが・・・、別の個所でエラーが。
たぶん今回の件とは関係ない・・・と思うんですが、

TcpClient^ client = gcnew TcpClient(textBoxIPAddress->Text, this->port);

1台のPCで、2つアプリケーションを起動して行っています。
textBoxIPAddress->TextにはPCのIPアドレスが入力されています。
this->portにはポート番号。ブロックしてません。

接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。
または接続済みのホストが応答しなかったため、確立された接続は失敗しました。

ブレークポイントを置いたら上記の行で止まります。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加