アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

Public Type Tpstndef
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件)

IntPtrを経由して行えばいいように思います



dim objPtr as IntPtr = Marshal.AllocHGlobal( Len(rbuf) )
として ファイルから読み込んだデータを格納できる IntPtr型の変数を準備します

' VB6ではファイルより大きな受け取りバッファでもエラーになりません
' VB.NETではその点融通が利かないようです
' LOFなどで読み込み量を調べて あらかじめ Redimであわせましょう
FileGet( fno, rbuf.実際のバッファ )
FileClose()

' rbufの読み込み実体がByte配列ならいいのですが …
Marshal.Copy( rbuf.実際のバッファ, 0, objPtr, rbuf.実際のバッファ.Length )
kdata = marshal.PtrToStructure( objPtr, GetType(Tpstndef))
' 使いおわったら開放しましょう
marshal.FreeHGlobal( objPtr )

といった具合です
    • good
    • 0
この回答へのお礼

ありがとうございました。これから、実行してみます。
というのは、デバックのトレースでkdataに値が入りません。
rbuf には値が入ります。
この回答をお手本にして考えてみます。

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

Lsetにreturnかけずにbufをしつ力したら

    • good
    • 0
この回答へのお礼

ありがとうございます。
たしかに rbuf には値がはいりますから、
おっしゃる通りでも良いと思います。
が、それでは構造体を定義した意味が薄れてしまいます。

imogasiからの進言もありましたので、この質問を閉め切ります。
(リストを一部修正しましたので)
以後は、http://oshiete1.goo.ne.jp/qa4376930.htmlの方でお願いします。

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

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