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自体は完成版ですので、問題無いはずですが…処理結果異常で終わります。
> 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
魔界の仮面弁士様へ
早速のご回答ありがとうございます。
すいません---ReDimに関しましては、記事に記載漏れで実際は、len(aa)/2で行っています。
ソースコードまで展開して頂いて誠にありがとうございます。
作業場では、この掲示板は閲覧出来ない様になっておりまして、
直ぐの確認が出来ません。
明日、確認の上ご報告させていただきます。
ありがとうございました。
魔界の仮面弁士様へ
報告遅くなりました。
私の他の処理もまずかったのですが、修正してお陰様で動作するようになりました。
実際のデータはメガ単位(1辺にでは無いですが)で扱うため、私の方法では処理が異常に遅かったのですが、魔界の仮面弁士様の一括返還を採用させて頂き、何とか処理スピードも上げる事ができました。
何故VB?との疑問がお有りだろうと思いますが、相手がEXCELの為
そのデータを読み取りDLLに渡すためVBを選択しました。
大変助かりました、どうもありがとうございました。
今後とも宜しくお願いいたします。
【解決】