固定長文字列の配列を含む構造体に、ファイルからデータを読み込むには?


TOM  2004-05-21 22:10:51  No: 113399

VB.net初心者です。Cで書かれたソースを変換しているのですが、ファイルから構造体にデータをうまく読み込めません。

Structure TEST
    <VBFixedStringAttribute(4)> Dim tst1 As String '4バイト文字列
    <VBFixedStringAttribute(10), VBFixedArray(10)> Dim tst2() As String  '10バイト文字列*10の配列
End Structure

上記のような構造体を作成し、
        ''--------------
        Dim tst As TEST
        l = Len(tst)
        fn = FreeFile()
        FileOpen(fn, "C:\txtx.txt", OpenMode.Random, , , Len(tst))
        FileGet(fn, tst, 1)
        FileClose(fn)
        ''--------------
上記のような方法でファイルから構造体にデータを読み込もうとしましたが、FileGetで、"レコード長が正しくありません。"のエラーが出てしまいます。
構造体の作成方法がおかしいのか、FileGetの使い方がおかしいのか、
解決できずに悩んでいます。良い方法等、ありましたらご指導ください。
よろしくお願いします。


MASUO  2006-03-10 06:35:52  No: 113400

どうも、はじめまして。
現在VB6.0からVB.NETへの移植作業で、この質問とほぼ同じ箇所でつまづきました。

上記の固定長文字列の配列の箇所は以下のようにしてみたのですが
うまくいきません。

<VBFixedArray(10), MarshalAs(UnmanagedType.ByValArray, ArraySubType:=UnmanagedType.ByValTStr, SizeConst:=10)> Dim tst2() As String '設定者名称

便乗質問ですが、宜しくお願い致します。


少しは考えよう  2006-03-10 08:57:48  No: 113401

私にはこういった情報を探し出せない理由が思いつきません。
数分でごろごろ見つかりますが、探そうとしているのでしょうか?

http://www.atmarkit.co.jp/fdotnet/vb6tonet2/vbnet2_02/vbnet2_02_04.html

http://www.microsoft.com/japan/msdn/net/vbtransitionguide/chapter4/chapter4_7.asp

http://www.microsoft.com/japan/msdn/net/vbtransitionguide/chapter4/chapter4_8.asp


MASUO  2006-03-10 19:48:31  No: 113402

お返事ありがとうございます。
勿論、表記されているサイトは全てチェックしていました。
ですが、書かれているのは固定長の文字列、もしくは値型の配列のケースで
固定長文字列の配列というケースはありませんでした。
(実際に試してもみてますが駄目でした)

この為、FileOpen関数のLen(tst)の所で欲しいサイズが得られていないように思います。
<VBFixedStringAttribute(n)>を使うとLen時に指定のサイズを返すようなのですが、配列だと関係ない感じです。
構造体のInitializeにて固定長分の文字列を入れてみても駄目でした。

書き忘れてましたが、VB6.0では
Public Type Test
    tst2(10) As String * 10
End Type

となっていた部分です。
VBFixedArray,VBFixedString,マーシャライズあたりを調べているのですが、うまくいきません。
ご教授いただける方、宜しくお願い致します。


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




  


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