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()
このように、DDE Serverから直接的に取得できる値の型は、Stringで、"150.00"のようになっています。これは、Hot Linkでも同じです。これを実際に使うには、数値型に変換しますが、その際に重大な注意点があります。
- Integer#Parseメソッドでは、正しく変換できません。なぜなら、小数点を含む文字列だからです。そのため、一度Double#Parseメソッドを呼んでから、Integer型に変換しましょう。
- 現在値のように、ザラ場前に値がないものは、文字列が空になりますので、そのことも考慮しておく必要があります。
- 文字列の末尾にNULL文字が付与されています。C言語でいう\0です。ログに出力しても表示されないのに文字数としてカウントされるため、気づかないと困惑すると思います。特に困るのは、現在値時刻のような"10:15"という文字列をTimeSpan.TryParseExact(value, "hh\:mm", Nothing, tspan)とやっても時刻が取得できないのです。末尾にNULL文字がついており、文字列フォーマットが指定した"hh\:mm"と一致しないためです。TryParseExactメソッドを使う場合は、末尾のNULL文字をSubstringメソッドなどで抜き取る必要があることに注意してください。
スポンサーリンク