tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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 にしてください。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。