Параметр для CreateThread
Добавлено: 29 мар 2005, 01:37
Функции для потока нужно передать два параметра: строку и целое (условно текст для окна и HWND окна, не суть важно).
Создаю структуру
Объявляю переменную prmsg упомянутого типа и перед созданием треда её заполняю:
и создаю новый поток:
Соответственно так разбираю параметр:
Дык вот, в messagebox при некоторых исходных строках почему-то
происходит урезание последнего символа. Тот же самый текст, запущенный
в тестовом приложении (мемо+кнопка) вообще неожиданно вываливается
с левым сообщением Canvas does not allow drawing (под Trace Into однако нормально отрабатывает).
Т.е. налицо моя ошибка, вот только куда копать понять не могу.
Аналогичный вызов с дельфёвским классом в качестве параметра работает
без проблем.
Буду благодарен за любые предположения...
Создаю структуру
Код: Выделить всё
TPRMSG = record
msg: PChar;
hwndPR: hWND;
end;
Код: Выделить всё
Move(msg,prmsg.msg,length(msg));
// аналог prmsg.msg:=PChar(msg); даёт тот же результат
prmsg.hwndPR:=hwndLabel;
Код: Выделить всё
thr := CreateThread(0, 0, @ThreadedProc, @prmsg, 0, thrID);
Код: Выделить всё
function ThreadedProc(prm: Pointer) :Integer; stdcall;
var
prmsg: TPRMSG;
...
begin
if Assigned(prm) then
begin
prmsg:= TPRMSG(prm^);
MessageBox(0,Pchar(' Threaded= '+prmsg.msg+'!'),'info', mb_OK);
end;
...
end;
происходит урезание последнего символа. Тот же самый текст, запущенный
в тестовом приложении (мемо+кнопка) вообще неожиданно вываливается
с левым сообщением Canvas does not allow drawing (под Trace Into однако нормально отрабатывает).
Т.е. налицо моя ошибка, вот только куда копать понять не могу.
Аналогичный вызов с дельфёвским классом в качестве параметра работает
без проблем.
Буду благодарен за любые предположения...