powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Языки программирования семейства Pascal [закрыт для гостей] / Заметки о Делфи.
Модераторы: s62
17 сообщений из 67, страница 3 из 3
Заметки о Делфи.
    #1515292
defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
s62  04.09.2025, 18:14
[игнорируется]
defecator [игнорируется] 

Почитай документацию, я ссылку привел. У меня работает то, что ты показал.
Это пока в одном модуле
И вообще нихуя непонятно, для чего это тебе надо
...
Рейтинг: 0 / 0
Заметки о Делфи.
    #1557951
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор темы
"Век живи, век учись" )
Функции winapi (может по-разному бывает, но есть вот такой вариант) в случае неуспеха возвращают результат, что ошибка, а какая именно - есть функции GetLastError или например для сокетов WSAGetLastError. Они возвращают код ошибки, а что она означает, можно посмотреть например на сайте Microsoft, там есть таблица кодов ошибок и что они означают. Поинтересовался, как вывести прямо в программе текст сообщения, а не код ошибки, если есть код. Оказывается, есть функция win32 API, FormatMessage, если задать определенные параметры, она это может. Но там буфер под строку, размер её передается, освобождать память потом надо, в общем не очень удобно.
А оказывается в библиотеках Delphi есть функция SysErrorMessage, которая делает то же самое: по коду ошибки возвращает её описание. Она, собственно, вызывает эту функцию winapi.
https://docwiki.embarcadero.com/Libraries/Sydney/en/System.SysUtils.SysErrorMessage
Код: Delphi
1.
function SysErrorMessage(ErrorCode: Cardinal; AModuleHandle: THandle = 0): string;
Норм. Раньше не знал.
...
Изменено: 20.10.2025, 16:13 - s62
Рейтинг: 0 / 0
Заметки о Делфи.
    #1558000
defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
s62  20.10.2025, 16:08
[игнорируется]
"Век живи, век учись" )
Функции winapi (может по-разному бывает, но есть вот такой вариант) в случае неуспеха возвращают результат, что ошибка, а какая именно - есть функции GetLastError или например для сокетов WSAGetLastError. Они возвращают код ошибки, а что она означает, можно посмотреть например на сайте Microsoft, там есть таблица кодов ошибок и что они означают. Поинтересовался, как вывести прямо в программе текст сообщения, а не код ошибки, если есть код. Оказывается, есть функция win32 API, FormatMessage, если задать определенные параметры, она это может. Но там буфер под строку, размер её передается, освобождать память потом надо, в общем не очень удобно.
А оказывается в библиотеках Delphi есть функция SysErrorMessage, которая делает то же самое: по коду ошибки возвращает её описание. Она, собственно, вызывает эту функцию winapi.
https://docwiki.embarcadero.com/Libraries/Sydney/en/System.SysUtils.SysErrorMessage
Код: Delphi
1.
function SysErrorMessage(ErrorCode: Cardinal; AModuleHandle: THandle = 0): string;
Норм. Раньше не знал.
так это как минимум с дельфи 2 тянется.
...
Рейтинг: 0 / 0
Заметки о Делфи.
    #1558024
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор темы
defecator  20.10.2025, 16:35
[игнорируется]
s62  20.10.2025, 16:08
[игнорируется]
"Век живи, век учись" )
Функции winapi (может по-разному бывает, но есть вот такой вариант) в случае неуспеха возвращают результат, что ошибка, а какая именно - есть функции GetLastError или например для сокетов WSAGetLastError. Они возвращают код ошибки, а что она означает, можно посмотреть например на сайте Microsoft, там есть таблица кодов ошибок и что они означают. Поинтересовался, как вывести прямо в программе текст сообщения, а не код ошибки, если есть код. Оказывается, есть функция win32 API, FormatMessage, если задать определенные параметры, она это может. Но там буфер под строку, размер её передается, освобождать память потом надо, в общем не очень удобно.
А оказывается в библиотеках Delphi есть функция SysErrorMessage, которая делает то же самое: по коду ошибки возвращает её описание. Она, собственно, вызывает эту функцию winapi.
https://docwiki.embarcadero.com/Libraries/Sydney/en/System.SysUtils.SysErrorMessage
Код: Delphi
1.
function SysErrorMessage(ErrorCode: Cardinal; AModuleHandle: THandle = 0): string;
Норм. Раньше не знал.
так это как минимум с дельфи 2 тянется.
Так я и не писал, что это новое.
...
Изменено: 20.10.2025, 16:53 - s62
Рейтинг: 0 / 0
Заметки о Делфи.
    #1558041
defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
s62  20.10.2025, 16:48
[игнорируется]
defecator  20.10.2025, 16:35
[игнорируется]
s62  20.10.2025, 16:08
[игнорируется]
"Век живи, век учись" )
Функции winapi (может по-разному бывает, но есть вот такой вариант) в случае неуспеха возвращают результат, что ошибка, а какая именно - есть функции GetLastError или например для сокетов WSAGetLastError. Они возвращают код ошибки, а что она означает, можно посмотреть например на сайте Microsoft, там есть таблица кодов ошибок и что они означают. Поинтересовался, как вывести прямо в программе текст сообщения, а не код ошибки, если есть код. Оказывается, есть функция win32 API, FormatMessage, если задать определенные параметры, она это может. Но там буфер под строку, размер её передается, освобождать память потом надо, в общем не очень удобно.
А оказывается в библиотеках Delphi есть функция SysErrorMessage, которая делает то же самое: по коду ошибки возвращает её описание. Она, собственно, вызывает эту функцию winapi.
https://docwiki.embarcadero.com/Libraries/Sydney/en/System.SysUtils.SysErrorMessage
Код: Delphi
1.
function SysErrorMessage(ErrorCode: Cardinal; AModuleHandle: THandle = 0): string;
Норм. Раньше не знал.
так это как минимум с дельфи 2 тянется.
Так я и не писал, что это новое.
Я к тому, что матчасть надо знать
...
Рейтинг: 0 / 0
Заметки о Делфи.
    #1558131
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор темы
defecator  04.09.2025, 18:16
[игнорируется]
s62  04.09.2025, 18:14
[игнорируется]
defecator [игнорируется] 

Почитай документацию, я ссылку привел. У меня работает то, что ты показал.
Это пока в одном модуле
...
Кстати ограничение насчет одного модуля легко устраняется, если рассуждать в общем, в данном случае мне это не было нужно. Когда обсуждали, ещё подумал, но не стал тогда писать.
В классе предка объявляем функцию SetMyProp в секции protected, которая присваивает private полю заданное значение. Но не назначаем свойству сеттер, так что свойство у предка read-only. А в потомке задаем сеттером эту функцию.
...
Изменено: 20.10.2025, 18:04 - s62
Рейтинг: 0 / 0
Заметки о Делфи.
    #1558236
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор темы
defecator  20.10.2025, 17:03
[игнорируется]
s62  20.10.2025, 16:48
[игнорируется]
defecator  20.10.2025, 16:35
[игнорируется]
s62  20.10.2025, 16:08
[игнорируется]
"Век живи, век учись" )
Функции winapi (может по-разному бывает, но есть вот такой вариант) в случае неуспеха возвращают результат, что ошибка, а какая именно - есть функции GetLastError или например для сокетов WSAGetLastError. Они возвращают код ошибки, а что она означает, можно посмотреть например на сайте Microsoft, там есть таблица кодов ошибок и что они означают. Поинтересовался, как вывести прямо в программе текст сообщения, а не код ошибки, если есть код. Оказывается, есть функция win32 API, FormatMessage, если задать определенные параметры, она это может. Но там буфер под строку, размер её передается, освобождать память потом надо, в общем не очень удобно.
А оказывается в библиотеках Delphi есть функция SysErrorMessage, которая делает то же самое: по коду ошибки возвращает её описание. Она, собственно, вызывает эту функцию winapi.
https://docwiki.embarcadero.com/Libraries/Sydney/en/System.SysUtils.SysErrorMessage
Код: Delphi
1.
function SysErrorMessage(ErrorCode: Cardinal; AModuleHandle: THandle = 0): string;
Норм. Раньше не знал.
так это как минимум с дельфи 2 тянется.
Так я и не писал, что это новое.
Я к тому, что матчасть надо знать
Это да. Не зная, можно изобретать велосипеды там, где нет нужды это делать. Ну вот, я расширил свой кругозор сегодня. )
Кстати, вот на sql.ru были грамотные люди в разделе Делфи, там можно было поучиться каким-то вещам, что-то узнать. Хотя стиль бывал и довольно резкий.
...
Изменено: 20.10.2025, 21:02 - s62
Рейтинг: 0 / 0
Заметки о Делфи.
    #1558237
defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
s62  20.10.2025, 21:00
[игнорируется]
defecator  20.10.2025, 17:03
[игнорируется]
s62  20.10.2025, 16:48
[игнорируется]
defecator  20.10.2025, 16:35
[игнорируется]
s62  20.10.2025, 16:08
[игнорируется]
...
так это как минимум с дельфи 2 тянется.
Так я и не писал, что это новое.
Я к тому, что матчасть надо знать
Это да. Не зная, можно изобретать велосипеды там, где нет нужды это делать. Ну вот, я расширил свой кругозор сегодня. )
Кстати, вот на sql.ru были грамотные люди в разделе Делфи, там можно было поучиться каким-то вещам, что-то узнать. Хотя стиль бывал и довольно резкий.
тут только я остался из тех аксакалов ! всю жизнь только Паскаль-Дельфи !
...
Рейтинг: 0 / 0
Заметки о Делфи.
    #1559574
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YuRock 
Участник
defecator  20.10.2025, 21:04
[игнорируется]
тут только я остался из тех аксакалов !
Я бы не был так уверен.
...
Рейтинг: 0 / 0
Заметки о Делфи.
    #1560368
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YuRock 
Участник
s62  20.10.2025, 16:08
[игнорируется]
для сокетов WSAGetLastError. Они возвращают код ошибки
Для сокетов WSAGetLastError не всегда работает, если интересно.
Например, если select возвращает не ошибку, но FD_ISSET( Socket, exceptfds ) - пришло событие ошибки в параметр exceptfds, то WSAGetLastError хрень вернет.
Надо получать код ошибки через getsockopt с параметром SO_ERROR и использовать его, либо устанавливать его в WSASetLastError, тогда WSAGetLastError отработает.
...
Рейтинг: 0 / 0
Заметки о Делфи.
    #1560385
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор темы
YuRock  22.10.2025, 15:39
[игнорируется]
s62  20.10.2025, 16:08
[игнорируется]
для сокетов WSAGetLastError. Они возвращают код ошибки
Для сокетов WSAGetLastError не всегда работает, если интересно.
Например, если select возвращает не ошибку, но FD_ISSET( Socket, exceptfds ) - пришло событие ошибки в параметр exceptfds, то WSAGetLastError хрень вернет.
Надо получать код ошибки через getsockopt с параметром SO_ERROR и использовать его, либо устанавливать его в WSASetLastError, тогда WSAGetLastError отработает.
Я использую не select, а WSAEventSelect. Да, например какие-то ошибки можно получить так (условный код).
Вызывается
Код: Delphi
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
case WSAWaitForMultipleEvents(1, @FEvents[0], False, aTimeout - TimeElapsed, False) of
  WSA_Wait_Event_0:
  begin
    WSAEnumNetworkEvents(FClientSocket, FEvents[0], NetworkEvents);
    if NetworkEvents.iErrorCode[FD_Read_Bit] = 0 then
    begin
      ...
    end
    else begin
       ...
       err := NetworkEvents.iErrorCode[FD_READ_BIT];  //код ошибки <--------------------
      ...
    end;
Но какие-то другие можно получить через WSAGetLastError.
...
Изменено: 22.10.2025, 16:08 - s62
Рейтинг: 0 / 0
Заметки о Делфи.
    #1560400
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YuRock 
Участник
s62  22.10.2025, 15:58
[игнорируется]
Но какие-то другие можно получить через WSAGetLastError
Только если ф-ция (select/recv/send и другие) вернула SOCKET_ERROR (-1)
...
Рейтинг: 0 / 0
Заметки о Делфи.
    #1560412
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор темы
YuRock  22.10.2025, 16:09
[игнорируется]
s62  22.10.2025, 15:58
[игнорируется]
Но какие-то другие можно получить через WSAGetLastError
Только если ф-ция (select/recv/send и другие) вернула SOCKET_ERROR (-1)
Ну да, но там же обычно или успешное выполнение или возвращает SOCKET_ERROR, например для connect, send, recv...
...
Изменено: 22.10.2025, 16:18 - s62
Рейтинг: 0 / 0
Заметки о Делфи.
    #1560414
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YuRock 
Участник
s62  22.10.2025, 16:18
[игнорируется]
YuRock  22.10.2025, 16:09
[игнорируется]
s62  22.10.2025, 15:58
[игнорируется]
Но какие-то другие можно получить через WSAGetLastError
Только если ф-ция (select/recv/send и другие) вернула SOCKET_ERROR (-1)
Ну да, но там же обычно или успешное выполнение или возвращает SOCKET_ERROR, например для connect, send, recv...
Обычно - да. Но вот с select не всегда так.
...
Рейтинг: 1 / 0
Нравится: s62
Заметки о Делфи.
    #1560476
defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
не сталкивался ни разу с такой хуетой, но я и select не пользовался, обычно хватало всегда recv/send
а у них сообщение об ошибке всегда было информативное

в некоторых сорцах (synapse, например, или RealThinClient) видел обработку FD_ISSET, но у меня не вылазило ни разу.
Возможно, это более актуально во всяких линуксах
Фик его знает
...
Изменено: 22.10.2025, 17:21 - defecator
Рейтинг: 0 / 0
Заметки о Делфи.
    #1560673
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YuRock 
Участник
defecator  22.10.2025, 17:17
[игнорируется]
Возможно, это более актуально во всяких линуксах
Фик его знает
Я все свои сетевые библиотеки, протоколы на сокетах Беркли написал, чтоб можно было если что скомпилить не только под винду. Пока, правда, не пришлось ни разу :)
Из виндовых функций используются только WSAGet/SetLastError.
defecator  22.10.2025, 17:17
[игнорируется]
обычно хватало всегда recv/send
select нужен для ожидания с таймаутом
...
Рейтинг: 0 / 0
Заметки о Делфи.
    #1560674
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YuRock 
Участник
YuRock  22.10.2025, 21:45
[игнорируется]
select нужен для ожидания с таймаутом
И для проверки (с ожиданием) возможности делать send тоже, кстати. Иначе может зависнуть если не навсегда, то надолго.
...
Рейтинг: 0 / 0
17 сообщений из 67, страница 3 из 3
Форумы / Языки программирования семейства Pascal [закрыт для гостей] / Заметки о Делфи.
Модераторы: s62
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]