Проблема с WinUser32 - страница 2

 
avatara:

а зачем заремили следующий?

Затем, что в отдельных случаях надо передавать строку- а в отдельных- число или указатель на массив интов.
MetaDriver:

2. Та я его по необходимости только включаю, чтоб память не жрал зазря. // У меня тут несколько терминалов запущено.

Дык поставь больше памяти- делов-то )) каменный век закончился- дешевле купить память чем платить программисту за экономию памяти :-)
 
jartmailru:
Затем, что в отдельных случаях надо передавать строку- а в отдельных- число или указатель на массив интов.

так а как вызов происходит? может потому и лается?

несоответствие типов.

не вижу строк в упор

 
avatara:

так а как вызов происходит? может потому и лается?

несоответствие типов.

не вижу строк в упор

int      PostMessageA (int hWnd,    // Окно, котоpое будет пpинимать сообщение, или $FFFF для всех пеpекpываемых или всплывающих окон. 
                        int Msg,     // Тип сообщения.
                        string wParam,  // Дополнительная инфоpмация о сообщении.
                        int lParam); // Дополнительная инфоpмация о сообщении.
Так видно?
 
avatara:

так а как вызов происходит? может потому и лается?
несоответствие типов.

В общем... если у функции стоит аргумент int, то это означает, что туда "войдет":
- int, стандартная ширина 4 байта
- любой массив- т.к. он передается адресом- т.е. передается 4-байтовый указатель
- строка, т.к. она опять же передается указателем
Вопрос в том, что указателя в мокле нет, а потребность передавать в SendMessage
как int, так и string / массивы- есть.
 
Ага, хреново только тогда, когда надо по-разному использовать один и тот же параметр.
 
TheXpert:
Ага, хреново только тогда, когда надо по-разному использовать один и тот же параметр.


Нет, не хреново. Для этого есть способы, как обойти.

Например:

#import "kernel32.dll"
   int lstrcat(string dst, string src);
#import
И после этого используем вариант с int. Пример можно посмотреть в моих скриптах.
 
С массивом тоже прокатывает?
 
Да даже с strcat не прокатывает- один из параметров- вообще-то [in, out]
 
jartmailru:
Да даже с strcat не прокатывает- один из параметров- вообще-то [in, out]


Alerter.mq4.

Посмотрите и проверьте. Все прокатывает.

...

PS

Clipboard.mq4 - там обратный пример.

 

Вообще-то имя функции не lstrcat, а lstrcatA (либо lstrcatW).

Но использование конкатенации строк для того чтобы получить адрес переменной - это очень не рациональный способ. Я бы даже сказал, очень глупый способ. Во-первых, тратятся ресурсы на выполнение ненужной операции. Во-вторых, надо всегда следить, чтобы размер выделенной памяти для первой строки был достаточным для вмещения обеих строк (нуль-терминатных). В противном случае огребёшь проблем.

Я использую для этих целей функцию int CharPrevA(string lpszStart,string lpszCurrent) из библиотеки "user32.dll". В обоих параметрах указываешь одну и ту же строковую переменную, и на выходе получаешь адрес этой переменной: address=CharPrevA(mystring,mystring);

Есть также вариант с помощью функции int CharNextA(string lpszCurrent) из той же библиотеки. Её надо использовать так: address=CharNextA(mystring)-1;

В общем есть ещё масса других, более извращённых вариантов :) Но те, что я привёл, по-моему самые простые. Если у кого есть более изящное решение, то выкладывайте.

Причина обращения: