Скачать MetaTrader 5

Использование GetWindowText

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Forex Trader
114280
Forex Trader  
Обнаружилось, что функция GetWindowText (и, насколько можно предположить, остальные функции, получающие LPTSTR), не возвращает значения:

string s;
GetWindowText(hwnd,s,num);
Print(s);

данная ситуация обходится предварительной инициализацией строки s. Задним числом можно догадаться о причинах этого, но ситуация, тем не менее, весьма неочевидная. Хотелось бы видеть в будущих релизах или соответствующую авто-инициализацию строковых переменных перед вызовами dll, или хотя бы пример использования (благо, в stdlib.h функция упомянута)
Forex Trader
114280
Forex Trader  
Для многих это очевидно

Syntax

int GetWindowText( HWND hWnd,
LPTSTR lpString,
int nMaxCount
);
Parameters

hWnd
[in] Handle to the window or control containing the text.
lpString
[out] Pointer to the buffer that will receive the text. If the string is as long or longer than the buffer, the string is truncated and terminated with a NULL character.
nMaxCount
[in] Specifies the maximum number of characters to copy to the buffer, including the NULL character. If the text exceeds this limit, it is truncated.
Forex Trader
114280
Forex Trader  
Вы правильно нашли обходной путь, однако имейте в виду, что инициализатор, используемый для строки s, больше нигде нельзя использовать.
Forex Trader
114280
Forex Trader  
babybear: хелп к винапи, разумеется, вещь полезная ). Я немного о другом (речь даже не о конкретной функции): раз уж полного сокрытия технических деталей не получается, то было бы здорово видеть в mt-документации немного больше информации о том, как все это "изнутри" устроено. Т.е. если речь идет о передаче/приемке в длл чуть более сложного, чем int (те же массивы котировок, или вот я бы с удовольствием тот же LPRECT пополучал бы) - уже нужно в голове прокручивать "ага, а внутри это, скорее всего то-то, значит, используем как обычный указатель". Т.е. что касается конкретно передачи буферов LPTSTR - я бы с бОльшим удовольствием увидел бы что-нибудь вроде SetLength.

slawa: не вполне уразумел насчет "больше нигде нельзя использовать" - т.е.? Я инициализирую константой.
Forex Trader
114280
Forex Trader  
Вот эту константу больше нельзя нигде использовать. Попробуйте её распечатать после вызова функции GetWindowTextA.
   string initstr="         1         2         3         4         5         6";
   GetWindowTextA(hwnd,initstr,StringLen(initstr));
   Print("         1         2         3         4         5         6");


Forex Trader
114280
Forex Trader  
кстати, по поводу документирования: Слава, вы не думали прикрутить к mql4.com что-нибудь более простое для добавления, чем "статьи", т.е. нечто wiki-образное? В официальной документации - находится самый минимум, новичку, сталкивающемуся с чуть более сложными, но постоянными вопросами (нормализация, скажем) - приходится спрашивать в форуме в сотый раз. А некоторые важные и нетривиальные вопросы обсуждаются и теряются в глубинах старых страниц. (их и искать никто не будет, поскольку не догадывается о том, что такой вопрос в принципе существует ;))). Опять же можно было бы кучковать пожелания к будущим версиям.
Forex Trader
114280
Forex Trader  
хехех, забавненько )))). У вас устроена какая-то хэш-таблица констант?
ну вот, а вы, babybear, говорите, что все очевидно )))...
Forex Trader
114280
Forex Trader  
Этот побочный эффект обнаружил Rosh примерно год назад, когда пытался прочитать имя директория, откуда запущен клиентский терминал.
Forex Trader
114280
Forex Trader  
хехех, забавненько )))). У вас устроена какая-то хэш-таблица констант?
ну вот, а вы, babybear, говорите, что все очевидно )))...

Сдаюся! :)
Оптимизаторы на.
Forex Trader
114280
Forex Trader  
Этот побочный эффект обнаружил Rosh примерно год назад, когда пытался прочитать имя директория, откуда запущен клиентский терминал.



Видимо речь об этом - "MQL4: Crash в "About""
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий