■54309 / inTopicNo.4) |
Re[2]: VB6⇒VB2008のソケット通信コンバージョンに関して |
□投稿者/ サンプラザ (3回)-(2010/10/13(Wed) 13:10:57)
|
■No54304 (魔界の仮面弁士 さん) に返信 > ■No54301 (サンプラザ さん) に返信 >>コネクト処理のConnectSocketメソッドでエラー番号:10038が返ってきます。 >>※VB2008固有のソケットクラスは時間がないため、使用しない方針で進めています > ConnectSocketメソッド というのは、 > ソケット API の connect 関数の事でしょうか?
記述不足で申し訳ありません。 ソケット API の connect 関数の事です。
>>引数に問題があるかと思い、VB6とAPI宣言を比較していたのですが、 >>VB2008初心者の私だけでは中々解決策が見つかりません。 > 幾つか注意点がありますが、ByVal と ByRef を間違えているのが最大の問題でしょう。 > > > たとえば http://pcdn.int21.co.jp/pcdn/vb/noriolib/vbmag/9802/winsock/ > にある VB5 のサンプルでは、 > Public Declare Function connect Lib "wsock32.dll" _ > (ByVal s As Long, sName As sockaddr, ByVal namelen As Long) As Long > となっていますよね。 > つまり『Function connect(ByVal Int32, ByRef sockaddr, ByVal Int32) As Int32』です。 > それに対し、サンプラザ さんのコードは、 > Public Declare Function ConnectSocket Lib "wsock32.dll" Alias "connect" _ > (ByRef s As Integer, ByRef sName As sockaddr, ByRef namelen As Integer) As Integer > となっています。 > つまり『Function connect(ByRef Int32, ByRef sockaddr, ByRef Int32) As Int32』です。 > Function connect(ByVal Int32, ByRef sockaddr, ByVal Int32) As Int32 が必要な個所で > Function connect(ByRef Int32, ByRef sockaddr, ByRef Int32) As Int32 と宣言してしまえば、
魔界の仮面弁士様のおっしゃる通り、ByVal と ByRefを修正したところ、 正常にコネクト処理が開始され、ダミーサーバと通信する事ができました。 本当にありがとうございます。
残りのソケットAPI関数も宣言に誤りがないか、MSDNを参照しながら修正したいと思います。 再度ご質問させて頂くかもしれませんが、その際はよろしくお願いいたします。
|
解決済み
|