![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 еще и длину текста знать должны.