• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB4.0の「LSet」と同等の機能をVB2008で実行するには?)

VB2008でVB4.0の「LSet」機能を実行する方法

このQ&Aのポイント
  • VB2008の練習のために、VB4.0のコードをVB2008にコンバージョンしています。
  • しかし、VB4.0の「LSet」はコンバージョンできないために困っています。
  • 質問者は、他の方法でリストをコピーする方法を知りたいとしています。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

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 ) といった具合です

Junko20546
質問者

お礼

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

その他の回答 (1)

  • wEqM
  • ベストアンサー率0% (0/6)
回答No.2

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

Junko20546
質問者

お礼

ありがとうございます。 たしかに rbuf には値がはいりますから、 おっしゃる通りでも良いと思います。 が、それでは構造体を定義した意味が薄れてしまいます。 imogasiからの進言もありましたので、この質問を閉め切ります。 (リストを一部修正しましたので) 以後は、http://oshiete1.goo.ne.jp/qa4376930.htmlの方でお願いします。

関連するQ&A

専門家に質問してみよう