winsockを使用して、文字列と数値を送受信するには?

解決


ぼぼ  2002-06-13 23:59:51  No: 104370

初めて質問させていただきます。

winsock コントロールを使用して、TCP/IPでデータの送受信をしたいのですが、
送信したいデータは以下のように文字列と数値の混合した型になっています。

Private Type S_SENDMSG         '標準モジュールに定義
    MojiA     As String * 4
    Num       As Long
    MojiB     As String * 8
End Type

文字は文字列として、数値はバイナリデータとして送信したいのですが、

Dim sendmsg As S_SENDMSG
Winsock1.SendData sendmsg 

とすると、
「パブリック オブジェクト モジュールで定義されたパブリック ユーザー定義型に
限り、クラス モジュール内のパブリック プロシージャの引数または戻り値、
またはパブリック ユーザー定義型の要素として使用することができます。」
というエラーが発生します。

Winsock1.SendData sendmsg.MojiA

とするとうまくいきますが、sendmsg に格納したデータ全部をまるごと送信する
ことはできないのでしょうか?

ヘルプ等を調べてみたのですが載っていませんでした。
超初心者です。申し訳ありませんが教えてください。
よろしくお願いします。


YuO  2002-06-14 07:16:54  No: 104371

エラーメッセージを見る限り,PrivateをPublicにすればよさそうな気が……。


ぼぼ  2002-06-17 18:21:47  No: 104372

リプライ遅れてすいません。

Public Type S_SENDMSG
としてやってみましたが、同じエラーが出力されます。
標準モジュール(*.bas)に定義していますが、定義場所が違う、又は
他に何か記述しなくてはならないのでしょうか?
winsock.sendata にはユーザ定義型は使用できないってことはありますか?
申し訳ありません。教えてください。


けみ  2002-06-17 19:50:08  No: 104373

いったんバイト配列にコピーしてみてはどうでしょう。

Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Dim bt(0 To 15) As Byte
Dim sendmsg As S_SENDMSG

CopyMemory bt(0), sendmsg , 15
Winsock1.SendData bt

ただしバイトアライメントの問題もあるようなので注意が必要です。
http://www.pervasive.co.jp/support/Ref/sup_0015.html

この辺が絡んでくるので使えないとか。。。予想です。


けみ  2002-06-17 20:19:18  No: 104374

上記アドレスはwinsockとは直接関係ありません。
参考ということで。


ぼぼ  2002-06-17 22:07:55  No: 104375

提示していただいた参考ページを読んで、
私のやろうとしたことはバイトアライメントの関係でできないことが
わかりました。バイト配列にコピーして行います。
ありがとうございました。
大変参考になりました。


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

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






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