Текущий архив: 2007.09.30;
Скачать: CL | DM;
Вниз
Ещё раз про перевод из Си на Паскаль Найти похожие ветки
← →
J_f_S (2007-08-29 03:02) [40]Германн, а в чем вопрос?
errorCode - указатель. Если порт открыт, то результат функции, полагаю, - тру, и значение errorCode можно не смотреть. Если порт открыть не удалось - то функция возвращает фальш и если надо, то причину ошибки можно узнать в *errorCode.
← →
Германн © (2007-08-29 03:19) [41]
> J_f_S (29.08.07 03:02) [40]
>
> Германн, а в чем вопрос?
>
Это не вопрос. Это жалобный вопль :)
> А ни в одной другой функции в ТЗ нет параметра типа "errorCode"!
> А результат везде BOOL. :(
Так как я могу возвратить тип ошибки???
← →
J_f_S (2007-08-29 03:25) [42]
> Так как я могу возвратить тип ошибки???
Ааа... Ну тогда можно поругать аффтаров десигн-спецификейшн :)
Можно завести статик переменную вроде _last error, ну и ошибку передавать с помошью своих самописных аналогов GetError/SetError.
← →
J_f_S (2007-08-29 03:28) [43]
> GetError/SetError.
GetLastError/SetLastError конечно.
← →
Германн © (2007-08-29 03:43) [44]
> J_f_S (29.08.07 03:25) [42]
>
>
> > Так как я могу возвратить тип ошибки???
>
> Ааа... Ну тогда можно поругать аффтаров десигн-спецификейшн
> :)
> Можно завести статик переменную вроде _last error, ну и
> ошибку передавать с помошью своих самописных аналогов GetError/SetError.
>
> <Цитата>
>
> J_f_S (29.08.07 03:28) [43]
>
>
> > GetError/SetError.
>
> GetLastError/SetLastError конечно.
>
Ей богу! Хотел ради шутки озвучить здесь этот вариант!
Но решил, что это не достаточно смешно! :)
← →
J_f_S (2007-08-29 04:08) [45]
> Германн © (29.08.07 03:43) [44]
Ну, если спеки поправить нельзя, а нужда есть,- то вай нот?
В конце концов, это же чистый Си, где нет механизма исключений, - остается только передавать код ошибки наверх при нехороших ситуациях во время вызова функций. Если интерфейс функции не предусматривает явной передачи кода ошибки, и поменять его нельзя, то вариант с GetLastError - единственный, и причем вполне приличный.
← →
J_f_S (2007-08-29 04:11) [46]По крайней мере механизм получения кода ошибки будет единым для всего фреймворка. Такой подход используется во многих сишных либах.
← →
Anatoly Podgoretsky © (2007-08-29 10:20) [47]
> Так как я могу возвратить тип ошибки???
Запросто если знать, что такое BOOL
Программисты на СИ часто его используют как не BOOL, а шире
BOOL может принимать множество значений, если 0 нет ошибки, а если не 0, то или как BOOL или как Cardinal и значение код ошибки.
На Паскале можешь попробовать сделать приведение или описать функцию, как возвращающую Cardinal
Подобными трюка не брезговали и в Микрософт, а уж рядовые программисты те вообще ничего не боятся, но бога, ни дьявола.
← →
Германн © (2007-08-29 16:17) [48]
> Anatoly Podgoretsky © (29.08.07 10:20) [47]
>
>
> > Так как я могу возвратить тип ошибки???
>
> Запросто если знать, что такое BOOL
> Программисты на СИ часто его используют как не BOOL, а шире
> BOOL может принимать множество значений, если 0 нет ошибки,
> а если не 0, то или как BOOL или как Cardinal и значение
> код ошибки.
> На Паскале можешь попробовать сделать приведение или описать
> функцию, как возвращающую Cardinal
>
> Подобными трюка не брезговали и в Микрософт, а уж рядовые
> программисты те вообще ничего не боятся, но бога, ни дьявола.
>
Хех. Нашел сейчас этого СИ-шника и задал этот вопрос ему.
Ответ не угадает никто.
Код ошибки я должен записывать в ту переменную, ссылку на которую я получил в параметрах функции
> bool OpenPort(unsigned int port, unsigned int * errorCode,
> char * errorTxt)
Как вам такой вариант?
← →
Anatoly Podgoretsky © (2007-08-29 16:22) [49]> Германн (29.08.2007 16:17:48) [48]
Ну этот ответ напрашивался из прототипа функции.
Я отвечал не на него, а по поводу трюков с BOOL
← →
Германн © (2007-08-29 16:26) [50]
> Anatoly Podgoretsky © (29.08.07 16:22) [49]
>
> > Германн (29.08.2007 16:17:48) [48]
>
> Ну этот ответ напрашивался из прототипа функции.
>
Наверно я не донёс в полной мере суть такого типа передачи кода ошибок. Сыылка на переменную errorCode мне передается вышеуказанным способом при открытии порта. Я должен эту ссылку запомнить и при возникновении ошибок при вызовах любых других функций той же dll"ки записывать код ошибки в эту переменную.
← →
J_f_S (2007-08-29 16:29) [51]
> Германн © (29.08.07 16:26) [50]
Чтож... Клевый десигн. Развлекайся ;)
← →
Anatoly Podgoretsky © (2007-08-29 16:31) [52]Ты обрати еще внимание на errorTxt
Если его должен заполнять ты, то тогда Ой
← →
Anatoly Podgoretsky © (2007-08-29 16:31) [53]А вообще бардак
← →
Германн © (2007-08-29 16:35) [54]
> Anatoly Podgoretsky © (29.08.07 16:31) [52]
>
> Ты обрати еще внимание на errorTxt
> Если его должен заполнять ты, то тогда Ой
> <Цитата>
>
> Anatoly Podgoretsky © (29.08.07 16:31) [53]
>
> А вообще бардак
>
Обратил уже :(((
← →
wicked © (2007-08-29 23:23) [55]> Германн
хе-хе.... весело вам
1) бардак в прототипеbool OpenPort(unsigned int port, unsigned int * errorCode, char * errorTxt)
делая так, программер клиентского приложения заведомо обречен на геморрой - ты должен писать в errorTxt не адрес строки с ошибкой (как было бы в случае с char * * errorTxt), а текст самой ошибки в буффер, контроля над которым ты не имеешь... поменяется текст ошибки, станет длинее - вуаля, згавствуйте глюки, большие и малые
а глюки из-за переписанной памяти очень неприятные и трудные для уловления
2) а шо будет, если сей барин захочет открыть 2 порта? куда писать ошибки?
или делать внутренний static хеш-список с ключом "номер порта" и значениями "адрес кода ошибки" и "адрес сообщения про ошибку"?
2.а) а номер порта далее в функциях фигурирует? можно отследить, к какому порту обращается клиентское приложение?
3) шо будет, если клиентское приложение захочет открывать порты в разных потоках?
можешь смело задать эти вопросы вашему "сишнику"
← →
Anatoly Podgoretsky © (2007-08-29 23:25) [56]> wicked (29.08.2007 23:23:55) [55]
> можешь смело задать эти вопросы вашему "сишнику"
А не отделу кадров?
← →
isasa © (2007-08-29 23:50) [57]А мне вот просто стало интересно, какова цель передачи "сообщений" об ошибке, вместе с ее кодом.
← →
wicked © (2007-08-30 00:33) [58]> isasa © (29.08.07 23:50) [57]
> А мне вот просто стало интересно, какова цель передачи "сообщений"
> об ошибке, вместе с ее кодом.
а шоб в клиентской программе не париться - шо дали, то и вывел
← →
Германн © (2007-08-30 01:55) [59]
> wicked © (29.08.07 23:23) [55]
>
> > Германн
> хе-хе.... весело вам
>
Да уж. Веселее некуда :(((
Ну по поводу errorTxt тут несколько понятнее. В ТЗ черным по белому написано, что errorTxt – указатель на строку, в которую записывается текстовое описание ошибки. Строка должна оканчиваться нулевым символом. Размер памяти под строку: 2048 байт.
Длиннее текст ошибки врядли станет. Хотя тут бабушка надвое сказала. В основном тексты ошибок должен сформировать я сам, но ведь и система может мне подкинуть какую-нибудь подлянку. Хотя бы на этапе отладки всей системы.
>
> 2) а шо будет, если сей барин захочет открыть 2 порта? куда
> писать ошибки?
> или делать внутренний static хеш-список с ключом "номер
> порта" и значениями "адрес кода ошибки" и "адрес сообщения
> про ошибку"?
> 2.а) а номер порта далее в функциях фигурирует? можно отследить,
> к какому порту обращается клиентское приложение?
>
Автор ТЗ предполагает только один порт. "Это однозначно" (с) Жириновский
Другим людям эту библиотеку отдавать никто не планирует. (Пока)
Но ведь возможен случай, когда функция OpenPort не будет вызвана! Хотя бы из-за ошибок на этапе отладки. Будет ещё хуже вплоть до AV. Ну до AV я не допущу, положим, но и он не получит никакой информации.
> 3) шо будет, если клиентское приложение захочет открывать
> порты в разных потоках?
Вот этого точно не будет. ТОЛЬКО ЧЕРЕЗ МОЙ ТРУП!!!
Или я, или СОМ-порты в доппотоках!
Так что обязательно "утрясу" эти проблемы с СИ-шником. Отдел кадров пока подождет :)
P.S. Создалось впечатление, что у СИ-шников есть свой Фленов. И у него есть ученики :)
← →
Германн © (2007-08-30 02:00) [60]P.P.S
Этот СИ-шник будет теперь руководить нашими программистами.
Розыч, понял теперь, кто у нас работает программистами?
:)
← →
J_f_S (2007-08-30 02:06) [61]А причем тут наезды на С? Нет, честно?
← →
Германн © (2007-08-30 02:18) [62]
> J_f_S (30.08.07 02:06) [61]
>
> А причем тут наезды на С? Нет, честно?
>
А где тут наезды на С?
Нигде я ничего не говорил о СИ как о языке. Просто так сложилось, что новый наш сотрудник работает на мелкософтомском СИ. И вышеописанное ТЗ составил именно он. И речь шла о нём и о ТЗ, а не о языке.
Если ты о фразе
> Создалось впечатление, что у СИ-шников есть свой Фленов.
> И у него есть ученики :)
то это не наезд на СИ. Это гораздо более - наезд на Дельфи (Паскаль) Уж поверь :)
Страницы: 1 2 вся ветка
Текущий архив: 2007.09.30;
Скачать: CL | DM;
Память: 0.6 MB
Время: 0.026 c