投稿者 やんやん  (その他) 投稿日時 2009/1/26 08:38:16
魔界の仮面弁士様
報告が遅れてしまい、すみません。
自分の勉強不足にもかかわらず、フォローいただいたことに深く感謝致します。
自分も魔界の仮面弁士様のように、困っている人がいたら、ちゃんとフォローしていこうと思いました。

結果から言うと、Byte配列で送信したら、データが無事受信できました。
「データ頂戴」という以外にも、同じAPIを使っている箇所があり、それらは問題なかったので、Aliasで別名つけて、ByRef Byteを引数として、バイト配列の先頭のアドレスを渡すようにしました。
これで無事データが受信できました。

ただ、
>API に String で渡すと、そのデータを「Unicode テキストを表すバイナリ」とみなして
>規定のコードページ(日本語では CP932/Shift_JIS)に変換した上で DLL に渡されます。
>そして、DLL から受け取る場合には、それを逆変換して Unicode として String に
>戻そうとする設計になっているためです。

上記のせいか、受信データから特定の値を何も変更せずに取り出そうとすると、きちんと値がとれなかったりしたので、以下のコードを追加しました。
---
    Dim ts1 As String

    ts1 = StrConv(<受信データの文字列>, vbFromUnicode, 1033)
    ts2 = StrConv(ts1, vbUnicode)
    
    <受信データの文字列> = ts2
---

アメリカ人が作ったAPIなので、自分の推測通り、ASCIIコードを扱っていたようです。
なので、SJISではAsc(Chr(<番号>))の結果が0になるところがありました。
ご教授頂いた通りバイト配列で数字を突っ込んだら値が取れました。
多分、1バイトで機器のIDを取得したくてASCIIコードを利用したのだと推測しています。

元々Unix+Cあがりなので、Windows+VBなどは経験値が低いので、わからないことが多いので、もっと勉強しなければいけないと思いました。

魔界の仮面弁士様、本当にありがとうございました。
本当に助かりました。

結果お知らせまで。