公式アカウントからの投稿が始まります

「VB4.0の「LSet」と同等の機能をVB2008で実行するには?」の質問で
リストに間違いがあったので訂正します。
Public Type TpstndefをPublic Type Tpkyokudef

VB2008の練習のために、VB4.0のコードをVB2008にコンバージョンしています。
VB4.0の「LSet」がどうしてもコンバージョンできません。
LSet 以外はVB2008で機能がありました。
なにか方法はないでしょうか。
リストをコピーします。

Public Type Tpkyokudef
equip As Integer
stn_no As Integer
stn_class As Integer
line_no As Integer
stn_kind As Integer
End Type

Dim kdata As Tpkyokudef
Dim rbuf As buf1K
   ・
  省略
   ・
Get #fno, seeksize, rbuf
LSet kdata = rbuf

A 回答 (2件)

buf1kの構造体の中身は ・・・


ファイルはレコード単位を設定しているのですか

当方のテストでは 自動変換で変換されたコードを使ってます
VB4/6コード
Private Type buf1k
  buf(1023) as Byte
End Type

VB2005コード
  Private Structure buf1k
    <VBFixedArray(1023)> Dim buf() As Byte
    Public Sub Initialize()
      ReDim buf(1023)
    End Sub
  End Structure
といった具合ですが ・・・

2005側の使用時に
dim myBuf as buf1k
dim kdata as Tpkyokudef
myBuf.Initialize()

FileGet( #fno, myBuf )
Dim objPtr As IntPtr = Marshal.AllocHGlobal(Len(MyBuf))
Marshal.Copy(MyBuf.buf, 0, objPtr, MyBuf.buf.Length)
kdata = Marshal.PtrToStructure(objPtr, GetType(Tpkyokudef))
Marshal.FreeHGlobal(objPtr)
といった具合ですが ・・・

構造体Tpkyokudef には
<StructLayout(LayoutKind.Sequential)> _
といったような属性を付けたほうがいいかもしれません
    • good
    • 0
この回答へのお礼

ありがとうございました。
「Private Structure buf1k
<VBFixedArray(1023)> Dim buf() As Byte
Public Sub Initialize()
ReDim buf(1023)
End Sub
End Structure」
これを
「Dim myBuf (1023) As byte」
に置き換えることで 「kdata」に値がきました。

前回のhttp://oshiete1.goo.ne.jp/qa4376846.htmlの回答でも「kdata」に値がきました。
当初、kdataに値が入らなかったときは、
構造体Tpkyokudefのメンバーに配列を定義していたからでした。
この配列をshortの並びにかえるとkdataに値が入りました。
redfox63さまをはじめ皆様には大変なご迷惑をおかけしました。

お礼日時:2008/10/06 14:23

前の質問


http://okwave.jp/qa4376846.html?ans_count_asc=20
との関係は?
前の質問は閉じなくてよいのですか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
リストを間違えたので訂正しました。
Public Type Tpstndef を Public Type Tpkyokudefに訂正です。
質問の内容は同じです。
ご忠告ありがとうござました。

お礼日時:2008/10/04 23:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!