- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB4.0の「LSet」と同等の機能をVB2008で実行するには?)
VB2008でVB4.0の「LSet」機能を実行する方法
このQ&Aのポイント
- VB2008の練習のために、VB4.0のコードをVB2008にコンバージョンしています。
- しかし、VB4.0の「LSet」はコンバージョンできないために困っています。
- 質問者は、他の方法でリストをコピーする方法を知りたいとしています。
- みんなの回答 (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 ) といった具合です
その他の回答 (1)
- wEqM
- ベストアンサー率0% (0/6)
回答No.2
Lsetにreturnかけずにbufをしつ力したら
質問者
お礼
ありがとうございます。 たしかに rbuf には値がはいりますから、 おっしゃる通りでも良いと思います。 が、それでは構造体を定義した意味が薄れてしまいます。 imogasiからの進言もありましたので、この質問を閉め切ります。 (リストを一部修正しましたので) 以後は、http://oshiete1.goo.ne.jp/qa4376930.htmlの方でお願いします。
お礼
ありがとうございました。これから、実行してみます。 というのは、デバックのトレースでkdataに値が入りません。 rbuf には値が入ります。 この回答をお手本にして考えてみます。