Wizard In The Market
システムトレードの魔術師

*

MQLでのWindowMessageText使用時にstring型がバグる

公開日: : 最終更新日:2015/01/13 その他

昨日、ひたすら困ってました・・・orz
バグが発生していたソースは下記の通りです。

最後のPrint2つの動作なのですが、本来であれば
[ windowのタイトル ]
[ 空白 ]
と表示されるはずなのですが、
[ windowのタイトル ]
[ windowのタイトル ]
と表示されてしまうのです・・・。
MQLでは、外部関数を呼び出しての参照渡しでちゃんと動かないことが多いのは
DLL作成しているときに確認したので、GetWindowTextAの第二引数が
ポインタで指定できないことが原因だというのは推測がつくのですが、
手の打ちようがありませんでした(||||▽ )
こういうときは、困ったときのfaiさん。
英語系のサイトも当たってみましたが、良答はなかったです><
以前、Demo口座とアカウントをMQL言語を使わないで使用できるようにしていた時に、
GetWindowTextを使用していたのを思い出しました。

昨日の続き。。。

やはり、ココに答えがありました。
注目したのはここ。

空白がいっぱい。
80個空白があります。
こうやって、あらかじめgwstrにメモリを割り当てておく必要があったんですね・・・。
そうしないと、メモリの割り当てがずれてしまって正常に動作しないようです。
このあたりの知識は目下勉強中なので、詳しい考察は今後していきます。。。
誰かのご参考になれば幸いです・・・。
お読みくださり、ありがとうございます。

にほんブログ村 為替ブログへ 
Fx-Kirin

About Fx-Kirin

2009年10月にFXを開始、翌年2010年5月から脱サラをしてFX業界に専念。 2012年10月頃から本格的に勝ち始め、一月で資産を倍にする、2年半月間負けなし等、安定した収支で2013年11月に生涯FX収支が1億を超える。 投資スタイルはシステムトレード。プログラミングの知識がほぼない状態から、独学で自分がしたいと思うことであればほぼ実現することが可能なレベルまで成長。好きな言語はRuby, Python。必要となればC++からVBA、Pascal等なんでも行う。MT4/MT5のプログラミングも得意。 2011年にはFXで稼いだ資金をもとにシンガポールに移住し、留学も兼ねて起業をチャレンジするほど、ビジネスを興すことに熱意がある。国内の業者を主に使い始めたことから、2012年に帰国。零細株式会社経営中。

Adsense

  • このエントリーをはてなブックマークに追加
  • Pocket
  • 67 follow us in feedly

関連記事

no image

High_Low v2 (ZigZag)のバーが出るタイミング

こんばんは!キリンです。 今ドラマ見てたら良いセリフ聞きました。 単調な仕事をする町工場に社員として働き出した新社会人

記事を読む

no image

チャーチストへの夢 part2

おはようございます。キリンです。 ブログのタイトルでもある「チャーチスト」ですが、 チャートだけで分析を行っていく人のこ

記事を読む

no image

■CI解析■人気のVQの計算方法

おはようございます。キリンです。 アメリカvsガーナは白熱した試合展開でしたね! 前半のガーナの運動量の多さによる守備は

記事を読む

no image

rubyでsqlite3を使うときにprepareは避けたほうが良さげ。

estimate_id というtextのcolumnを作って、prepareでデータ入れるようにしてexecuteす

記事を読む

no image

1分足の過去チャートを取得するアプリのご紹介

おはようございます。キリンです。 faiさんのブログでKowalski_Japanさんが紹介してくださっていたのを見つけ

記事を読む

no image

メタトレーダー4

今回は、自動取引プログラム(通称EA)を作成可能な無料ソフト 「メタトレーダー4」 の紹介です。 メタトレーダーとは、

記事を読む

no image

【コラム】トレーディングシステムの構築に向けて

みなさん、こんばんは! 今日も見ていただいてありがとうございます。 キリンです。 さて、動画以外は【コラム】という形でト

記事を読む

no image

12/1, 2, 3, 5, 6 運用結果

<colgroup> </colgroup>バイナリオプション日付曜日取引

記事を読む

no image

この世で一番攻略本の多いゲームはなんだと思いますか?

こんばんは。 ちょっと昨日の帰りにふと思って、 すごく楽しいと思えるようになったことがあります。 それは、ビジネスはゲー

記事を読む

no image

EAで取得したポジションの手動決済の際の注意

こんばんは。キリンです。 私どものEAに限らず、EAによるポジションを手動で決済すると 即別の注文が入ってしまうことが多

記事を読む

Comment

  1. 詠み人しらず より:

    SECRET: 0
    PASS:
    APIの意味から考えると
    GetWindowTextA(hwnd, gwstr, StringLen(gwstr));
    とするのが正しかったのです。
    MQ4に限らず、可変長Stringを採用している言語(VB等)からAPIを呼び出す時のおきまり事ですので、覚えておいて損はないかと思います。

  2. SECRET: 0
    PASS:
    >詠み人しらずさん
    おお!なるほど!
    char型でそういう概念が必要だとは知っていたのですが、string型でも必要になるのですね><
    とても勉強になりました!
    ありがとうございますm(__)m

  3. 詠み人しらず より:

    SECRET: 0
    PASS:
    ちょと書き方が不親切だったので、補足。
    可変長のstringをサポートしているMQL4から固定長(?)のstringしかサポートしていないAPIを呼ぶときは事前にstring領域の確保は必須です。
    そして、APIに確保した領域の長さを教える必要があります。(これが3つめの引数)
    ここに数値を直接書き入れると、確保した領域と食い違った場合、予期せぬ結果となり悩むことになるので、StringLenで確実に正しい長さを教えてあげるのがいいと思います。
    はじめの例だと StringLenは0になるので、それほど悩まずに、間違いに気づいたのかなと思います。

  4. SECRET: 0
    PASS:
    >詠み人しらずさん
    なるほど。文字数を指定する必要があるのは、
    固定長だったからなのですね。
    非常に勉強になりました。
    本当にありがとうございますm(__)m

詠み人しらず にコメントする コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Adsense

joblib によって謎のバグが起こる

joblib 0.14.1 にて確認.0.13.2 だと起こらない.import joblib を消

Fixing kernel error AMD-Vi: Event logged IO_PAGE_FAULT on Ryzen Machine

My pc was periodically shut down on 7:40 am JS

Ubuntu で仮想ディスプレイを使う

雑多な備忘録ですが、せっかくなので残しておきます。 Ubuntu 18.04 の resolv.c

PYPIへの登録を10秒でできるようになる方法

pip 使ってますよね Pythonを使っている人であれば、pip installでライブラリ

The art of debugging with GDB, DDD, and Eclipse の読書メモ

GDBの勉強がしたくて、下の本を原著で読んでみました。10年前の本だけど全然現役でした。

→もっと見る

PAGE TOP ↑