Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2013, 11:56   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
то есть Answer:= GetCfgData(ConfigData); правильно?
Да правильно у тебя был пример выше предоставлен. Чего-то я не пойму сомнений - запусти проверь, как отработает.
Цитата:
я думал что с PChar надо работать как с указателем.
В Делфи не надо.
Цитата:
достаточно будет прочитать PChar, и всё.
Не все. Память потом очищать нужно по хорошему.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.10.2013, 18:58   #12
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Не все. Память потом очищать нужно по хорошему.
А вот не надо выдирать мои слова из контекста. Я имел в виду возврат указателя на константную строку, как происходит с GetCommandLine, например.
Vapaamies вне форума Ответить с цитированием
Старый 05.10.2013, 19:45   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
не надо выдирать мои слова из контекста.
Я и не пытался.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.10.2013, 15:10   #14
Smallboy
Пользователь
 
Регистрация: 16.07.2013
Сообщений: 28
По умолчанию

И так подведем итог.
серийный номер хранится где-то в DLL и при вызове функции просто возвращается его адрес.

Я так понимаю выглядеть должно вот так все:
Код:
TYPE
TPosInfo = record
    Open: Byte;
    SerNo: PChar;
end;
 
GetCfgData  : function(var Info: TPosInfo): Byte; stdcall;
...
Var
   ConfigData: TPosInfo;
   SerNomer: string;
...
begin
  GetMem(ConfigData.SerNo,12+1);
  Answer:= GetCfgData(ConfigData);
  SerNomer:=GetCfgData.SerNo; // вот это мне кажется будет некорректно
  SerNomer:=StrPas(GetCfgData.SerNo); // а вот это верно
  FreeMem(ConfigData.SerNo,12+1);
...
end.
1.)Я так понимаю в случае передачи данных через функцию также будет корректна работа через стринг, к примеру так(если SerNo: PChar);

GetCfgData.SendData:=SerNomer; //вот это мне кажется будет некорректно
GetCfgData.SendData:='тест'; //верно. Нужно ли завершать строку #0 ???
GetCfgData.SendData:=PChar(SerNomer ); //тоже верно

2.) В описании к полю SerNo: PChar, указано, что это указатель на буфер серийного номера, минимальный размер которого 12+1 байт. GetMem(ConfigData.SerNo,12+1) выделит именно 12+1 байт, а как быть с тем , что это минимальный размер.

Последний раз редактировалось Smallboy; 07.10.2013 в 15:33.
Smallboy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы по Pchar Aleksey1989 Помощь студентам 1 12.12.2010 12:55
PChar Superlotles Помощь студентам 15 09.10.2009 10:16
Вопрос по PChar Armorer Общие вопросы Delphi 12 12.02.2009 20:17
PChar Роман Радер Общие вопросы Delphi 2 02.11.2008 18:50
Access violation на строке вида StrLCopy(PChar(st1),PChar(st2),10); malor Общие вопросы Delphi 1 11.07.2007 13:39