ソケットのVB6からVB2005移行へのメモ

VB6,VBA,VBS,EXCEL,DOS,BAT,WSH,WORDの小技メモ

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ 燈明日記/ Perlノート/ 漢字起源/ yahoo

はじめに

本ページは、ウインドウズ系全般のティプスメモです。

そう、はじめはVB系のティプスメモだったのですが…いつの間にか、ウインドウズ系全般のティプスメモになってしまいました。

ちなみに、ティプス(Tips)とは、マニュアルに書かれていない技法や裏わざのことですが、本ページでは、私が経験してこれはと思ったノウハウのメモになっています。

尚、以下は本サイトの最新情報(ブログ)です。

それでは、本ページが何かのお役に立てれば幸いです。ごゆっくりご覧ください。

◆ ソケットのVB6からVB2005移行へのメモ

VB2005では、ソケットはクラス(http://www.atmarkit.co.jp/fdotnet/special/networkprog/networkprog_01.html)でサポートされているので、VB6のロジックをそのまま移行することは、まずないと思います。

しかし、特殊な環境(.NETに依存しない)だとどうしてもソケットAPIで組まないとならないケースがあるのです。

そんな人(実は自分)のためにのメモです。


固定長文字列の移行

FixedLengthStringを使用します。

ただし、文字列はvalueプロパティに格納されます。

VB6

Dim hostname As String * 256

VB2005

Dim hostname As New VB6.FixedLengthString(256)

構造体の移行

まず、VB6の構造体はTypeで定義し、VB2005の構造体はStructureで定義します。

つぎに、VB6は16ビット言語で、VB2005は32ビット言語です。

したがって、VB6のIntegerは、VB2005ではShortです。

また同じく、VB6のLongは、VB2005ではIntegerです。

VB6でByte型で確保したエリアは、マーシャリング(MarshalAs)してString型で確保します。

ちなみに、マーシャリングとは、異なる言語間でのデータ変換のことです。

VB6

   Private Type WSADATA
       wversion As Integer
       wHighVersion As Integer
       szDescription(0 To 256) As Byte
       szSystemStatus(0 To 128) As Byte
       iMaxSockets As Integer
       iMaxUdpDg As Integer
       lpszVendorInfo As Long
   End Type

VB2005

   Private Structure WSADATA
        Dim wversion As Short
        Dim wHighVersion As Short
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256 + 1)> Dim szDescription As String
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=128 + 1)> Dim szSystemStatus As String
        Dim iMaxSockets As Short
        Dim iMaxUdpDg As Short
        Dim lpszVendorInfo As Integer
   End Structure

Any型の移行

VB6のどんな型でも受けられるAny型は、VB2005ではサポートされませんでした。

VB2005では、『どんな型でも』をオーバーロードで対応します。

つまり、引数タイプの異なる同名のAPIを複数定義するのです。


VB6

    Private Declare Sub RtlMoveMemory Lib "KERNEL32" (hpvDest As Any, ByVal hpvSource&, ByVal cbCopy&)

VB2005

    Private Declare Sub RtlMoveMemory Lib "KERNEL32" (ByRef hpvDest As Integer, ByVal hpvSource As Integer, ByVal cbCopy As Integer)
    Private Declare Sub RtlMoveMemory Lib "KERNEL32" (ByRef hpvDest As HOSTENT, ByVal hpvSource As Integer, ByVal cbCopy As Integer)
    Private Declare Sub RtlMoveMemory Lib "KERNEL32" (ByRef hpvDest As Byte, ByVal hpvSource As Integer, ByVal cbCopy As Integer)

おわりに

以下のページには、すべてのTIPSがあります。もしよろしければ、どうぞ!

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくVB-TIPS掲示板へご指摘ください。