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

11/15 運用結果

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

記事を読む

no image

取引履歴を元にトレードの結果をチャート表示するインジケータのご紹介

おはようございます。キリンです。 MT4以外でトレードした結果を、MT4のバックテストみたいにヴィジュアルで把握できるよ

記事を読む

no image

システムトレードの検証について

みなさんこんばんは! ちょっと身体壊し気味ですので、動画を休ませてもらってます^^; 申し訳ございません。 さて、今日は

記事を読む

no image

After Effectsでレイヤーのフレームの一括変更

ALT + []で指定時間にイン、アウトを設定できる。

記事を読む

no image

【コラム】良いEAを見つけるには?

お久しぶりです!キリンです。 超直感プログラミング講座も、 当初の目的であるEA作成にまで何とかこぎつけることができまし

記事を読む

no image

sakura ubuntu vps上でruby on railsをapache+passenger+mysqlで走らせる。

サーバー関係はやったことメモしとかないとすぐ忘れちゃう。sudo aptitude install apache2s

記事を読む

no image

Mysqlの外部からの接続

mysqlは、ポート開放、ユーザ権限の拡張以外に、skip-networking, bind-addressを無効に

記事を読む

no image

FXの利益が出る仕組み

こんばんは。 最近ずっと自動取引プログラムの作成にお熱な私です。 ある程度の成果(利益)は出てきました。 そうそう、ちょ

記事を読む

no image

EA除去時のstart()とdeini()の挙動

こんばんは。キリンです。 IsStopped()関数を調べていて気づいたことは、start()関数はEA除去時に2.5秒

記事を読む

no image

Java Access Bridgeライブラリ

http://docs.oracle.com/javase/7/docs/technotes/guides/acces

記事を読む

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 ↑