| 言語 | 特記事項 |
| 共通 |
- 変数名ですが、全般的に変数の型を接頭語としたハンガリアンもどき表記になってます。今流じゃないですね。私はこの方が相変わらず分かりやすいのですが。
- コールドリンクの GetItemValue メソッドは、直前の銘柄コード(トピック名)と項目名を保存し、文字列ハンドルの再利用及び再接続しないようにしていますが、ここは利用形態によって大いにカスタマイズの余地があります。大量の情報を取得するなど少しでも処理時間を短くしたいときは各自の利用形態に合わせてカスタマイズしてください。例えば複数の銘柄の4本値を取得する場合、4本値の項目名("始値", "高値", "安値", "現在値")は事前に文字列ハンドルを作成しておいて以後はそれを使うなど。
- 大量ついでに、RSS は DdeInitialize 後 DdeConnect を合計 16,383 回行うと次の 16,384 回目に接続できなくなるようです。これは DdeConnect と対になるように DdeDisconnect を行っても同じです。こうなると DdeUninitialize して再び DdeInitialize してもダメで、MarketSpeed と RSS を再起動・再ログインするしかなくなります。3. RSS の接続回数確認テスト サンプルプログラム - C#2008版に現象確認用のサンプルプログラムを掲載しておきましたのでご参考に。
|
| C#2010, VB2010, VC++2010 |
- それぞれの 2008 版を 2010 で読み込んで更新しただけです。一部 2010 に更新したことでエラーとなるものがありましたが修正しています。そのため 1 から書いたわけではないので、言語の癖のようなものはよく分かっていませんのであしからず。
|
| VB2008 |
- ラインナップを揃えるために初めて触ったのでコードはあまりスマートじゃないかもしれませんのであしからず。
- ホットリンクの項目値取得停止メソッド名は Stop にしたかったのですが予約語 Stop と重なって使えませんでした。このため項目値取得開始/停止は HotLinkStart/HotLinkStop にしています。
- DdeErr クラスの _ddeErrNoAndMsg 変数にエラー番号とエラーメッセージの一覧を初期値設定していますが、DMLERR_INVALIDPARAMETER の箇所は他の版と違って複数行のエラーメッセージがコメントアウトされていません。これは次の行への継続を示す行末の _(アンダースコア)がコメント行の中でも有効になってしまうためです。
|
| VC++2008 |
- ラインナップを揃えるために初めて触ったのでコードはあまりスマートじゃないかもしれませんのであしからず。特にマネージとアンマネージの相互運用は情報が少なかったり古かったりとやたら苦労しました。
- DDE API が格納されている user32.dll がリンクできなかったので、main メソッドのある msrss.cpp に #pragma comment(lib, "user32.lib") と書いて対応しています。
- DDE API に LPDWORD を渡すところ(DdeInitialize 関数)ではアドレスをそのまま渡せないみたいなので、同じ型の変数をその場で作成して渡しています。普通の変数と区別するためにその変数名の最初には __ (アンダースコア2個)を付けています。
- DDE API に LPTSTR を渡すところ(DdeCreateStringHandle 関数)ではアドレスをそのまま渡せないみたいなので、PtrToStringChars メソッドを使って pin_ptr 型に変換した変数を渡しています。普通の変数と区別するためにその変数名の最初には __ (アンダースコア2個)を付けています。
- VC++2008 版は Unicode でコンパイルしているので他の版と違いコードページは CP_WINUNICODE を使っています。DdeCreateStringHandle 関数に CP_WINANSI を指定して作成した文字列ハンドルを使って DdeConnect 関数を呼ぶとエラーになるので。しかし RSS はシフトJISで項目値を返してくるので、項目値を取得した後シフトJISから Unicode に変換しています。
|
| VB6.0 |
- API の BOOL 型の TRUE/FALSE は 1/0 ですが、VB6.0 の Boolean 型の True/False は -1/0 となっており、TRUE と True の値が違います。この影響か、DdeFreeStringHandle 関数など BOOL 型を返す API を Declare 宣言で As Boolean としてしまうと、例えば Dim bRtn As Boolean bRtn = DdeFreeStringHandle(...) が成功し TRUE が返ってきたとき、If (Not bRtn) Then でエラー判定すると Not bRtn が偽にならず真になってしまう現象が発生します。それを回避するため、サンプル中では BOOL 型の API も Long 型とし、API_FALSE(0 の Const) と比較するようにしています。
- ホットリンクのアドバイズループを停止するときに DdeClientTransaction 関数に ADVSTOP (&H40& Or XCLASS_NOTIFICATION) を渡しますが、WIN32API.TXT 中の XCLASS_NOTIFICATION は &H8000 となっており、このままだと整数型(Integer)のため -32768 となってしまい ADVSTOP の値が正しく設定されず DdeClientTransaction がエラーになります。このためサンプルの定数宣言では長整数(Long)を表す & を末尾に付け &H8000& と宣言しています。
|