- PR -

VB.NET FileGet関数を使用して構造体への値を取得する方法

1
投稿者投稿内容
麒麟
会議室デビュー日: 2004/05/11
投稿数: 10
投稿日時: 2004-11-12 13:15
サンプル1--------------------------------------
option strict OFF

PUBLIC CLASS TEST

Structure stc
<VBFixedString(2)>public aaa as string
<VBFixedString(2)>public bbb as string
End structure
Private pstc as stc

Private sub Form1_Load(・・・・・・・)handles myBase.load
dim iFNum as integer

iFnum=FreeFile()

FileOpen(iFNum,"C:\ファイル.txt",OpenMode.Binary,,,4)
FileGet(iFNum,pstc)
FileClose(iFNum)
END SUB
END CLASS

サンプル2--------------------------------------
option strict On

PUBLIC CLASS TEST

Structure stc
<VBFixedString(2)>public aaa as string
<VBFixedString(2)>public bbb as string
End structure
Private pstc as stc

Private sub Form1_Load(・・・・・・・)handles myBase.load
dim iFNum as integer

iFnum=FreeFile()

FileOpen(iFNum,"C:\ファイル.txt",OpenMode.Binary,,,4)
FileGet(iFNum,Ctype(pstc,stc)
FileClose(iFNum)
END SUB
END CLASS
------------------------------------------------


ただいま開発中で困っています。
上記サンプル1のコード内でFileGet関数を使用し、構造体へ値を取得している
部分がありますが、Option Strict OFF の場合は値が取得できますがサンプル2Option の用にStrict ON にすると、Ctypeをしても値が取得できません。

どなたか、構造体をFileGet関数に合わせる方法を知っていたら教えてください。
よろしくお願いいたします。
kanai
ベテラン
会議室デビュー日: 2004/09/13
投稿数: 98
投稿日時: 2004-11-12 15:28
Option Strict Off時に使用されているFileGetのオーバーロードは
 FileGet(Integer,System.ValueType,Long)
のようですので、このオーバーロード形式が確実に使用されるようにすれば同じ挙動になる、と考えられます。

これが最善の方法かはわかりませんが、次のようにしたらOption Strict Onの時も値を取得できました。(FileGet内でCTypeを行う方法ではうまくいきませんでした)

コード:

Option Strict On

Structure stc
<VBFixedString(2)> Public aaa As String
<VBFixedString(2)> Public bbb As String
End Structure

Private pstc As stc

Private Sub Form1_Load(...) Handles MyBase.Load
Dim iFNum As Integer

iFNum = FreeFile()

FileOpen(iFNum, "C:\ファイル.txt", OpenMode.Binary, , , 4)
Dim tmp As ValueType
tmp = pstc
FileGet(iFNum, tmp)
pstc = CType(tmp, stc)
FileClose(iFNum)
End Sub



[ メッセージ編集済み 編集者: kanai 編集日時 2004-11-12 15:34 ]
麒麟
会議室デビュー日: 2004/05/11
投稿数: 10
投稿日時: 2004-11-12 16:05
kanai様、ありがとうございました。

おっしゃるとおり、ピタリと値が取得できました!
本当にありがとうございました。

Ctypeにこだわりすぎでしたね、頭をもうちょっとやわらかくします。
1

スキルアップ/キャリアアップ(JOB@IT)