• ベストアンサー

VB.NET SendMessage通信

以下の方法で構造体のデータをSendMessageで送信したい。  ・一つのアプリケーションに1つスレッドがいる  ・TCPにてスレッドの方で電文(Byteデータ)を受信する  ・スレッドから電文内容をSendMessageでメインスレッドに送信する。 電文内容をByteデータのままとメインスレッドに 送信することは可能でしょうか。 (Stringに変換すると、&H00があるため正しく送れない) できればMashalを使用しない方向で考えています。 環境は  Visual Stadio 2008  VB.NET です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.1

別プロセスとの通信をさしていますよね? そうであれば、Windows RemortiongのIPC通信(名前付きパイプともいうみたいです。)を使用してみるというのはどうですか? SendMessageは文字列を送ることを想定しています、Cなどを扱った経験がおありですとイメージができると思いますが、文字列の終了はNullです。 そのためある文字列の、ポインタの指し示す範囲は指定アドレスから、Nullの前までとなります。 SendMessageは文字列を送るわけですから、ポインタの指し示す範囲は指定アドレスから、Nullの前までしか送信しないか、長さが異なるためエラーが出るかするのではないかと思います。 同じプロセス内のスレッド間であれば、大域変数を使用してアクセスすることができますので、別段通信手段を用意する必要はありません。 ただ、きちんと排他をかけることや、列挙体であれば、 Dim mySyncdQ As Queue = Queue.Synchronized(new Queue ) のようにSynchronizedを継承しているクラスを使用するようにすればよいでしょう。

mlc56724
質問者

お礼

他にも方法あるんですね。当たり前ですが。 自分の勉強不足を感じています。 ありがとうございました。

関連するQ&A