VB6.0での話です。
バイナリアクセスでファイルを開いたあと、
Getにてロードしている最中に、
「VisualBasicでサポートされていない
オートメーションが変数で使用されています。」
と表示されたのですが、
integer型にて宣言しており、思い当たる節がありません。
ためしにコメント記号で飛ばしてみたところ、
次の行もその次の行もエラーとなりました。
今まではロードできていたので、
原因が思い浮かびません。
どなたか、このような原因をご存じの方がいらっしゃったら、
教えて下さい。よろしくお願いします。
理由は分かりませんが、データファイルが破損しているか、もしくは
読みこみ位置を間違えた事によって、異常なデータとして読み込まれて
しまっているのだと思われます。
Variantに格納できる型の中には、VBからは利用できないものも存在します。
# 例えば、VT_UI2(符号無し16bit整数型)や、VT_HRESULTなどです。
Option Explicit
Private Const FName As String = "C:\A.BIN"
Private Sub Command1_Click()
Const VT_UI4 As Integer = 19
Dim V As Variant
Dim F As Integer
F = FreeFile(0)
If Dir(FName) <> "" Then
Kill FName
End If
Open FName For Binary As #F
'Long型を格納したVariant値をバイナリ出力する。
V = CLng(1234567)
Put #F, , V
'先頭2バイトに格納されるデータ型領域を、vbLong値[&H0003]から、
'符号無し32bit整数型を表す値に変更する。
Put #F, 1, VT_UI4
Close #F
F = FreeFile(1)
Open FName For Binary As #F
'改めて、Variant変数に読み直してみる(ここでエラー発生)
Get #F, , V
Close #F
End Sub
ご回答ありがとうございました。
変数の定義を一度全部消して、
あらたに書き直したところできました!
根本的な原因が分からなかったのですが、
おそらくおっしゃるように読み込む位置のずれがあったり、
あとは書き込んだ際とは違う型で読み込んでいたせいがあったようです。
Variantについて詳しく学ぶ機会が無かったのですが、
ソースを参考にして学んでみたいと思います。
ありがとうございました!
> おそらくおっしゃるように読み込む位置のずれがあったり、
> あとは書き込んだ際とは違う型で読み込んでいたせいがあったようです。
それ以外の可能性としては、
>>> integer型にて宣言しており、思い当たる節がありません。
というのが、実はInteger型ではなく、Variant型になっていたのかもしれませんね。
例えば、『Dim A, B As Integer』のように、型宣言を省略した記述になっていたとか…。
ツイート | ![]() |