Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TEdit и свойство Text


snake_r ©   (2005-01-20 10:18:00) 

Здравствуйте!
пытаюсь передать параметром в функцию, значение свойства text объекта класса Tedit. Параметр функции имеет тип PChar.
Пишу f1(PChar(Edit1.Text)); в функцию передается мусор.
посмотрел в исходниках StdCtrls , свойство Text класса TEdit, там  нигде не стоит типа :(

где реально хранится текст из этого свойства, и как получить к нему указатель?


Alexander Panov   (2005-01-20 11:18:00) [1]

snake_r   (20.01.05 11:14) [11]
блин пол дня возить ся из-за этого stdcall


Точно, бывает.
Я один раз возился целый день из-за того, что в параметрах вместо DWORD было Integer.


Style   (2005-01-20 11:15:00) [2]


> блин пол дня возить ся из-за этого stdcall


Бывает :)


snake_r   (2005-01-20 11:14:00) [3]

тьфу черт :(
блин пол дня возить ся из-за этого stdcall


PVOzerski   (2005-01-20 11:12:00) [4]

2snake_r   (20.01.05 10:53) [5]
Ошибка во 2-й строке :^)
Var f1:Function (UserName,ParamName,Mean:PChar):Integer; stdcall;
В процедурных переменных ведь тоже соглашения о параметрах забывать не надо.


Alexander Panov   (2005-01-20 11:09:00) [5]

snake_r   (20.01.05 11:08) [8]
чем меня должно это настораживать, если я передаю в функцию DLL преобразованую переменную?


Обрати внимание на stdcall.
Соглашения о передаче параметров должэны быть одинаковыми.


snake_r   (2005-01-20 11:08:00) [6]

чем меня должно это настораживать, если я передаю в функцию DLL преобразованую переменную?


Alexander Panov   (2005-01-20 10:57:00) [7]

+
Var f1:Function (UserName,ParamName,Mean:PChar):Integer;


Alexander Panov   (2005-01-20 10:56:00) [8]

Тебя не настораживает различие в строках -

Function SetUserParam(UserName,ParamName,Mean:String):Integer;

Function SetUserParam(UserName,ParamName,Mean:PChar):Integer;  stdcall;


snake_r   (2005-01-20 10:53:00) [9]

Function SetUserParam(UserName,ParamName,Mean:String):Integer;
Var f1:Function (UserName,ParamName,Mean:PChar):Integer;
   h:HWND;
begin
h:=LoadLibrary(PChar(ExtractFilePath(ParamStr(0))+'usermanager.dll'));
@f1:=GetProcAddress(h,'SetUserParam');
if @f1<>nil Then
 f1(PChar(UserName),PChar(ParamName),PChar(Mean));
FreeLibrary(h);
end;

в DLL

Function SetUserParam(UserName,ParamName,Mean:PChar):Integer;  stdcall;
Begin
try
 MainLog.Append(UsersFile+StrPas(UserName)+StrPas(ParamName)+StrPas(Mean));
 Result:=0;
 MainLog.SaveLog;
except
 Result:=1;
 MainLog.Append('try section');
end;
MainLog.SaveLog;
End;


snake_r   (2005-01-20 10:50:00) [10]

как узнал что мусор, очень просто, потомучто результат функции это запись этой строки в файл.
а на счет длин текста Pchar???!!! это ты что то не из той оперы :)
Pchar это массив Char заканчивающийся #0.
А длина строки прописывается тольео у ShortString, где в нулевом символе массива стоит длина строки.


Style   (2005-01-20 10:50:00) [11]

Код давай :)


snake_r   (2005-01-20 10:50:00) [12]

пардон, Pchar это указатель на массив :)


Strech   (2005-01-20 10:42:00) [13]

А как ты знаешь, что туда мусор передался? Функции использующие PChar еще и длину текста знать должны.


Наверх

Титульная страница Поиск, карта сайта Написать письмо