タイトル : Re: 配列時の書き方に関して 投稿日 : 2013/09/22(Sun) 16:55 投稿者 : 魔界の仮面弁士
> ※の行を以下のように書き換えました 対応する関数が無いからとはいえ、VB6 の MidB$ 関数を、VB.NET の Mid 関数に 置き換えてはいけません。VB6 の Mid$ 関数を VB.NET Mid 関数に置きかえるなら良いですが。 > →astrDat(lngIx) = System.Text.Encoding.Unicode.GetBytes(Mid(strData, .lngPosB, .lngLenB)) bytDataCnv と strData の関係を説明してもらわないと、意図が読み取れないです。 VB6 の方は、「Shift_JIS バイナリ(の一部)を、文字列に変換するコード」なのに、 VB.NET の方は、「文字列(の一部)を、Unicode バイナリに変換するコード」に 置き換えているようですが、そもそも gf_GetValue 関数で何をさせたいのでしょうか? > Dim lngLenB As Integer 変数名のプレフィックスが型名と一致していません。 典型的な「システムハンガリアンの弊害」ですね…。 > VB6.0のプログラムをVB.NETへ移行しているのですが 変数宣言が「lngLenB」「lngPosB」と書かれているも関わらず、 コードでは「.lngPosB」「.lngLenB」という With 的表現が使われて いることから推察するに、これは実際のコードでは無いのですよね。 とりあえず、 ・bytDataCnv は Shift_JIS のバイナリ を格納した Byte 型の一次元配列 ・lngPosB は、バイナリの切り出し開始位置(1〜)を示す Long 値 ・lngLenB は、切り出すバイト長(0〜)を示す Long 値 ・MidB$ 関数を使って、Shift_JIS バイナリの一部を切り出す ・astrDat(lngIx) には、切り出したバイナリを Unicode 変換して String として格納する という意図だと推察しますが、それならば astrDat(lngIx) = System.Text.Encoding.GetEncoding(932).GetString(bytDataCnv, lngPosB - 1, lngLenB) と書いてみてください。 「.GetEncoding(932)」の部分は「.GetEncoding("Shift_JIS")」とも書けます。 (.Default を使う事もできますが、その場合、日本語OS以外での動作が異なります) bytDataCnv が シフトJIS のバイナリなので、Encoding も Shift_JIS を指定しています。 bytDataCnv が UTF-16 のバイナリの場合は、Encoding を Unicode にしてください。 |