16進文字列をDLLにバイナリ形式で渡すには?

解決


KT  2010-01-25 18:55:54  No: 102173  IP: [192.*.*.*]

VB6で作成したプログラムから、DLLにパラメータとして渡したい。
VB側---テキストに入力された、例えば”5C40FEDE…”を
DLL側---16進のバイトデータの連続、x”5C40FEDE…”と渡したい場合
どの様にすれば宜しいでしょうか?
VB初心者ですので、宜しくお願いいたします。
一応、こんな感じと作ってみましたが…

dim aa as string
dim bb() as byte

''文字列aaには、十六進数の文字列が格納されています。
aa = "5C40FEDE"

aaから、2バイトずつ切り出して、バイナリ変数であるbbに
入力したいのですが、どのような処理を行なえばよいでしょうか?
n = 0
for i = 1 to Len(aa) Step 2
    bb(n) = CByte("&H" & Mid(aa, i , 2))
    n = n + 1
next i

どうも16進バイトデータの連続になってないようで、
DLL自体は完成版ですので、問題無いはずですが…処理結果異常で終わります。

編集 削除
魔界の仮面弁士  2010-01-25 19:21:38  No: 102174  IP: [192.*.*.*]

> dim bb() as byte
ReDim の指定はどうされましたか?
Len(aa) が 8 なので、受け側の配列としては
bb(0)〜bb(3) 分の指定が必要ですよね。


> 一応、こんな感じと作ってみましたが…
一括変換という事であれば、下記のような方法もありますが、
KT さんのコードと結果は同じになるはず…。

Private Sub Form_Load()
    Dim aa As String
    aa = "5C40FEDE"

    Dim bb() As Byte
    bb = ToBinary(aa)
End Sub

Public Function ToBinary(ByVal text As String) As Byte()
    With CreateObject("Microsoft.XMLDOM").createElement("KT")
        .DataType = "bin.hex"
        .text = text
        ToBinary = .NodeTypedValue
    End With
End Function

編集 削除
KT  2010-01-25 19:36:42  No: 102175  IP: [192.*.*.*]

魔界の仮面弁士様へ

早速のご回答ありがとうございます。
すいません---ReDimに関しましては、記事に記載漏れで実際は、len(aa)/2で行っています。

ソースコードまで展開して頂いて誠にありがとうございます。
作業場では、この掲示板は閲覧出来ない様になっておりまして、
直ぐの確認が出来ません。

明日、確認の上ご報告させていただきます。
ありがとうございました。

編集 削除
KT  2010-01-26 20:05:57  No: 102176  IP: [192.*.*.*]

魔界の仮面弁士様へ

報告遅くなりました。
私の他の処理もまずかったのですが、修正してお陰様で動作するようになりました。
実際のデータはメガ単位(1辺にでは無いですが)で扱うため、私の方法では処理が異常に遅かったのですが、魔界の仮面弁士様の一括返還を採用させて頂き、何とか処理スピードも上げる事ができました。
何故VB?との疑問がお有りだろうと思いますが、相手がEXCELの為
そのデータを読み取りDLLに渡すためVBを選択しました。

大変助かりました、どうもありがとうございました。
今後とも宜しくお願いいたします。

【解決】

編集 削除