C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■26473  Re[1]: C#で通信データを構造体にcastしたいのですが。
□投稿者/ Jitta on the way -(2008/10/10(Fri) 07:14:12)
    No26468 (ぼつ さん) に返信
    > はじめまして。
    > C#初心者です。
    >
    > 開発環境:VS2005 C#
    >
    > サーバ・クライアント間でデータの送受信(TCP/IP)を行う際に、送信データを構造体にセットして、
    > 受信時にデータを取り出しやすく作りたいと思っています。(C言語ではそのような記述で動作させた事があります。)
    > 例えば、下記のようなデータを構造体にしてやりとりしたいのですが、C#では構造体をcastできないのでしょうか?
    >        char A[5];
    >        char B[2];
    > int C;
    > long D;
    >
    > もしくはもっと便利な書き方があるのでしょうか?
    > ちなみに通信相手は、WindowsでないOSでC言語で記述しています。
    >

    構造体のコンストラクターで、バイトを取り出して代入すると言う方法になります。


    アライメントと、エンディアンに要注意。その構造体、2+5+4+4 バイトじゃないですよ。
記事No.26468 のレス /過去ログ48より / 関連記事表示
削除チェック/

■90452  Re[4]: AddHandler Eventの別スレッドについて
□投稿者/ TanuTanu -(2019/03/12(Tue) 13:17:24)
    PANG2 様

    ご教授ありがとうございます。

    その方法は禁断だったのですが・・・

    魔界の仮面弁士 様、Azulean 様の下記コメにもあるようにその方法しか残されていないのかもしれませんね。
    特にビギナーの私にはそれが一番シンプルですし、、、

    >イベントの発火にしろ、デリゲートの呼び出しにせよ、それが実行されるスレッドは、
    >「イベント通知を受け取る側/デリゲートインスタンスの生成側」でコントロールするものではなく、
    >「イベントを発生させる側/デリゲートでメソッドを呼び出す側」でコントロールするものかと。

    もう暫く検討してみて対処方法が他になければPANG2 様にご教授頂いた方法で進めようと思います。

    ありがとうございました。
記事No.90434 のレス /過去ログ156より / 関連記事表示
削除チェック/

■90455  Re[4]: AddHandler Eventの別スレッドについて
□投稿者/ 魔界の仮面弁士 -(2019/03/12(Tue) 14:31:26)
    2019/03/12(Tue) 14:41:42 編集(投稿者)

    No90452 (TanuTanu さん) に返信
    > 魔界の仮面弁士 様、Azulean 様の下記コメにもあるようにその方法しか残されていないのかもしれませんね。

    スレッド管理の話とイベントの発生順の話は無関係ですよね…?


    質問内容は「イベントの発生順を変更したい」ということではないのでしょうか。

    それともイベントの発生順は JavaScript → VB の順番のままで構わないので、
    VB 側のイベント処理を「別スレッドで処理させたい」という質問なのでしょうか。



    No90454 (魔界の仮面弁士 ) に追記
    > また、イベントは登録した順に割り当てられるものであり、発生順を変えることは基本的にできません。
    >
    > onclick だけなら、イベントの付け外しも比較的容易なのですが、

    とりあえず
     https://www.javadrive.jp/javascript/event/sample2_1.html
    に対するサンプル。


    Option Strict On
    Public Class Form1
     Private doc As mshtml.HTMLDocument
     Private yahooButton As mshtml.IHTMLElement
     Private Event1 As mshtml.HTMLInputTextElementEvents2_Event

     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      Dim o As Object = GetIEDocument( ターゲットのHWND ) ' No90411 を参照
      doc = DirectCast(o, mshtml.HTMLDocument)
      yahooButton = DirectCast(doc.all.item("yahoo"), mshtml.IHTMLElement)
      Event1 = DirectCast(yahooButton, mshtml.HTMLInputTextElementEvents2_Event)
      AddHandler Event1.onclick, AddressOf WebDisp_click
     End Sub

     Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
      yahooButton.click()
     End Sub

     Private Function WebDisp_click(ByVal e As mshtml.IHTMLEventObj) As Boolean
      MsgBox("webDisp_onclick", MsgBoxStyle.SystemModal)
      Return True
     End Function
    End Class


    この場合、input type="button" に対する onclick が割り当て済みなので、
    その後で VB からイベントにアタッチしても、JavaScript 側の処理が先に実行されます。
    そのため VB の WebDisp_click が呼ばれるのは、Web ページダイアログが閉じられた後になります。


    上記の順番を入れ替えて、VB 側で捕らえてから JavaScript 側の処理を実行させるようにするなら、たとえばこんな感じ。


    Option Strict On
    Public Class Form1
     Private doc As mshtml.HTMLDocument
     Private yahooButton As mshtml.IHTMLElement
     Private Event1 As mshtml.HTMLInputTextElementEvents2_Event
     Private yahooButton_onclick As Object

     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      Dim o As Object = GetIEDocument( ターゲットのHWND ) ' No90411 を参照
      doc = DirectCast(o, mshtml.HTMLDocument)
      yahooButton = DirectCast(doc.all.item("yahoo"), mshtml.IHTMLElement)

      yahooButton_onclick = yahooButton.onclick '元の function オブジェクト
      yahooButton.onclick = Nothing '割り当てクリア

      Event1 = DirectCast(yahooButton, mshtml.HTMLInputTextElementEvents2_Event)
      AddHandler Event1.onclick, AddressOf WebDisp_click
     End Sub

     Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
      yahooButton.click()
     End Sub

     Private Function WebDisp_click(ByVal e As mshtml.IHTMLEventObj) As Boolean
      MsgBox("webDisp_onclick", MsgBoxStyle.SystemModal)

      Return CBool(CallByName(yahooButton_onclick, "[DispId=0]", CallType.Method, e)) '元の onclick 処理をここで呼び出す
     End Function
    End Class
記事No.90434 のレス /過去ログ156より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -