fc2ブログ

Cold Link

NDdeライブラリを使って、Cold Linkの実装の説明をします。
スポンサーリンク

client = New NDde.Client.DdeClient("RSS", "8411.T")
client.Context.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
client.Connect()
itemMap = New Dictionary(Of String, String) ' Itemとその値を格納する
itemMap.Add("現在値", "")
itemMap.Add("現在値時刻", "")
itemMap.Add("出来高", "")
itemMap.Add("最良売気配値1", "")
itemMap.Add("最良買気配値1", "")
For Each itemName As String In itemMap.Values
Dim value As String = client.Request("現在値", 1000)
itemMap.Item(itemName) = value
Next
client.Disconnect()
DdeClientクラスのコンストラクタで、ServiceとTopicを指定しています。2行目で、エンコーディングを指定していますが、これは日本語の値を取得するときに文字化けしないようにするために必要になります。3行目で、ConnectメソッドでServerと接続します。11行目で、Requestメソッドで「現在値」を要求しています。引数で指定している「1000」は応答待ちのタイムアウト時間(ミリ秒)です。13行目で、Serverと切断しています。この例では、値を取得したらすぐに、切断していますが、不要になるまで接続したままでも構いません。
このように、DDE Serverから直接的に取得できる値の型は、Stringで、"150.00"のようになっています。これは、Hot Linkでも同じです。これを実際に使うには、数値型に変換しますが、その際に重大な注意点があります。
  1. Integer#Parseメソッドでは、正しく変換できません。なぜなら、小数点を含む文字列だからです。そのため、一度Double#Parseメソッドを呼んでから、Integer型に変換しましょう。
  2. 現在値のように、ザラ場前に値がないものは、文字列が空になりますので、そのことも考慮しておく必要があります。
  3. 文字列の末尾にNULL文字が付与されています。C言語でいう\0です。ログに出力しても表示されないのに文字数としてカウントされるため、気づかないと困惑すると思います。特に困るのは、現在値時刻のような"10:15"という文字列をTimeSpan.TryParseExact(value, "hh\:mm", Nothing, tspan)とやっても時刻が取得できないのです。末尾にNULL文字がついており、文字列フォーマットが指定した"hh\:mm"と一致しないためです。TryParseExactメソッドを使う場合は、末尾のNULL文字をSubstringメソッドなどで抜き取る必要があることに注意してください。



スポンサーリンク
<<DDE Clientの実装 | ホーム | Hot Link>>
コメント(0)
コメントの投稿
トラックバック(0)