不思議なエラー?

解決


みのみの  2004-02-14 08:20:23  No: 111810

VB6.0での話です。
バイナリアクセスでファイルを開いたあと、
Getにてロードしている最中に、
「VisualBasicでサポートされていない
オートメーションが変数で使用されています。」
と表示されたのですが、
integer型にて宣言しており、思い当たる節がありません。
ためしにコメント記号で飛ばしてみたところ、
次の行もその次の行もエラーとなりました。
今まではロードできていたので、
原因が思い浮かびません。
どなたか、このような原因をご存じの方がいらっしゃったら、
教えて下さい。よろしくお願いします。


魔界の仮面弁士  2004-02-14 11:13:31  No: 111811

理由は分かりませんが、データファイルが破損しているか、もしくは
読みこみ位置を間違えた事によって、異常なデータとして読み込まれて
しまっているのだと思われます。

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


みのみの  2004-02-14 23:36:59  No: 111812

ご回答ありがとうございました。
変数の定義を一度全部消して、
あらたに書き直したところできました!
根本的な原因が分からなかったのですが、
おそらくおっしゃるように読み込む位置のずれがあったり、
あとは書き込んだ際とは違う型で読み込んでいたせいがあったようです。
Variantについて詳しく学ぶ機会が無かったのですが、
ソースを参考にして学んでみたいと思います。
ありがとうございました!


魔界の仮面弁士  2004-02-15 02:23:42  No: 111813

> おそらくおっしゃるように読み込む位置のずれがあったり、
> あとは書き込んだ際とは違う型で読み込んでいたせいがあったようです。

それ以外の可能性としては、
>>> integer型にて宣言しており、思い当たる節がありません。
というのが、実はInteger型ではなく、Variant型になっていたのかもしれませんね。
例えば、『Dim A, B As Integer』のように、型宣言を省略した記述になっていたとか…。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加