FC2ブログ
現役プログラマー村健の、投資に役立つプログラムを作るための勉強ブログです。 自動売買、システムトレードに挑戦!します。 勉強と習得の成果を記録です。
本ブログについて
本ブログは、プログラマー観点で投資への対費用効果を上げるために何ができるか?を考えていくブログです。
基本的には、ツール作成・公開、投資に関わるプログラム情報、最終的には 完全なる自動売買を目指しています。

現在、HPの方で現在作成中のツールや発注ロジックなどを公開中です。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
楽天RSSからのDDE通信による株価データを受信する機能を作成する為の
テストツール作成の進捗です。


原因不明のバグがありましたが、なんとか解決しました。

サーバのコールバック処理のところで、XTYP_ADVSTARTの戻り値を
Dim ret As IntPtr = New IntPtr(True)
Return ret
にしていたのが原因でした。
VBのTrueは-1。仕様上は戻り値が0以外と書いてあったので
間違いないと思っていましたが、これでした。
1を返すようにすると正常に動きました。

参考にしているソースはCなので同じTrueでも問題ないんですよね~。
気づきませんでした。。。


しかし、また新たな問題が発生です。
次々と強敵が現れるRPGみたいです。

ダミーデータ送信部をRSSに見立てて、データ受信部で複数銘柄の複数項目を登録していくと、
何度目かのDdeClientTransactionで例外が発生してしまいます。
VB2003はこの命令でNullReferenceExceptionが発生したとメッセージが。
命令仕様を調べても特に使い方に問題はありません。

自宅でVB2005で試すと、以下のメッセージが。
CallbackOnCollectedDelegate が検出されました。
Message: コールバックが、型 'GetRss!GetRss.API+DdeCallBack::Invoke' のガベージ コレクションされたデリゲートで行われました。これは、アプリケーションのクラッシュ、破損、およびデータの損失を発生させる可能性があります。デリゲートをアンマネージ コードに渡すとき、デリゲートは 2 度と呼び出されないことが確実になるまでマネージ アプリケーションによって維持されなければなりません。

さらに、本物のマケスピ+RSSで試すと、問題なくとおります。。。

これはダミーデータ送信部がおかしい??




ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
コメント
この記事へのコメント
初めまして。
私もFXのチャートソフトからDDEを使ってリアルタイムデータを
取得しようとしていて、この問題に遭遇しました。
こちらでの現象は、XTYP_ADVSTARTでデータの受信を開始して、
5分ぐらい経つと同様のメッセージが表示されてしまうというものでした。

原因は、DdeInitializeに、コールバック関数をdelegateとして
直接ポンと渡していた事で、そうするとDdeInitializeを抜けた後は
マネージドコード内でdelegateが誰からも参照されなくなり、
そのままGCに回収されてエラーが発生しているようでした。
しかたがないので、delegateをいったんフィールドに格納して参照を
作ってやってからDdeInitializeに渡すことで何とか解決しました。
たぶん、GC周りをいじれば直接GCの管理からはずす方法もあるんでしょうが・・・

http://msdn2.microsoft.com/ja-jp/library/843s5s5x.aspx
http://msdn2.microsoft.com/ja-JP/library/bfeyhsdy.aspx
2006/09/09(土) 11:01 | URL | negi #-[ 編集]
>>negiさん
コメントありがとうございます。
しかも参考リンクまではってもらって。

negiさんのコメントにあるとおり、たぶんGCで消えているんだろうなと思い色々試してはみたのですが、うまくいってない状況でした。
コールバック関数自体をSharedで宣言すればメモリ上には残ると思いこんでおり、これで試してだめだったので、GC原因の線を諦めかけてた所でした。

コメントを参考に、クラスの内部変数を作成してコールバック関数のアドレスを保持するように変更したところ、問題なく登録できました。

本当にありがとうございました。
感謝感激です。
2006/09/09(土) 17:49 | URL | 村健 #-[ 編集]
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://investprogrammers.blog70.fc2.com/tb.php/84-dea786ec
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。