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

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

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

記事を読む

no image

ホームページ作成

お疲れ様です。 ご無沙汰してます。きりです。 なっかなか更新できてないですね。 反省・・・。 近々、メタトレーダについて

記事を読む

no image

11/18 11/19 運用結果

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

記事を読む

no image

11/7 運用結果

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

記事を読む

no image

Bluetoothデバイスの設定で画面が真っ白、白画面になり設定できない

komadoとかair displayのandroidへのデスクトップ延長アプリが悪さをしている可能性大・・

記事を読む

no image

新年のご挨拶

新年明けましておめでとうございます。昨年は数々の苦と遭遇してしまう年となってしまいましたが、それらは今年から乗り越え

記事を読む

no image

【default.tpl】劇的☆Before After ・・・MT4チャートの初期設定を保存

おはようございます。キリンです。 今日は匠の技を紹介したいと思います。 MT4の標準状態でのチャートって、 蛍光色の緑と

記事を読む

no image

Rails3での add_to_base Active Reacord

use model_instance.errors << “Msg” instead of depr

記事を読む

no image

メッセージキューをActivemqからMySQLに切り替える

http://info.dwango.co.jp/rd/2010/01/mysql.html

記事を読む

no image

C++のDLLからC#にstringを返す

はまりました。const char*はStringで受けるって書いてるんだもん。大変でした。簡単に要点だけ。C+

記事を読む

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

本気のFX部長! Kirin@FTL にコメントする コメントをキャンセル

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

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 ↑