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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2016, 10:50   #11
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ТС, у вас внешнее АПИ?
или просто портируете код?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.01.2016, 10:57   #12
Djaba
 
Регистрация: 17.01.2016
Сообщений: 8
По умолчанию

Ну как бы я ее в самом первом своем сообщении написал, в вопросе данной ветки. Есть структура, написанная на С++. Нужно перевести на делфи. Есть внешнее устройство, к нему драйвера и DLL, написанная на плюсах. А работать нужно в среде делфи.
Djaba вне форума Ответить с цитированием
Старый 18.01.2016, 11:05   #13
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну тогда да, ручками, со смещениями.
вы можете сделать класс. чтоб работать с ним, а он потом вернет вам структуру эту(она по сути два DWORD по размеру)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.01.2016, 11:07   #14
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

а поле cbInQue имеет какой размер?
Или вся структура сколько байт получается? 64 или 45 + sizeof(DWORD) = 67?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 18.01.2016, 11:23   #15
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

12 байт там поидее, три DWORD
я обсчитался.
Цитата:
а поле cbInQue имеет какой размер?
свой, полный

тут трудность в том что надо строго знать кто что занимает.
в частности по адресам:
Код:
FTSTAT: 0xbfde63b4
cbInQue: 0xbfde63bc
адреса битовых полей недоступны.
но выяснить можно в принципе.
ибо я не уверен в поведении компилятора, либо он начнет поле что не влезла с нового DWORD, либо он берет частично и потом выравнивает.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 18.01.2016 в 11:29.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.01.2016, 11:27   #16
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
свой, полный
Уверен? Тогда с какого смещения оно начинается? с 45-го бита или с 64-го?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 18.01.2016, 11:29   #17
Djaba
 
Регистрация: 17.01.2016
Сообщений: 8
По умолчанию

Предполагаю, что cbInQue имеет полный размер - 32 бита. Обычно, подобные структуры дополняются полем типа
DWORD fReserved : 5;
которе бы дополняло размер всей структуры до какой либо кратности:8,16,32 бит, но не использовалось в программе.
Нужно пробовать. Если устройство даст адекватный ответ, то так оно и есть.
Djaba вне форума Ответить с цитированием
Старый 18.01.2016, 11:30   #18
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

дописал там.

с 64.
меня более беспокоит поле fDummy.
хотя выяснить могу и битовую раскладку.

плюс, а там не было директив никаких #pragma pack какой-нить.
ибо если стоит иное выравнивание, то тогда структура займет иной размер.

плюс, порядок байт у устройства какой?

(просто сам сча с компа работаю с устройствами под ARM, там иной порядок байте недели в x86/x86_64)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 18.01.2016 в 11:38.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.01.2016, 11:50   #19
Djaba
 
Регистрация: 17.01.2016
Сообщений: 8
По умолчанию

Подобных директив нету.
Давайте рассмотрим другую структуру, оттуда-же, как по-моему, более наглядную.
Хранит параметры виртуального COM-прота.

typedef struct _FTDCB {
DWORD DCBlength; /* sizeof(FTDCB) */
DWORD BaudRate; /* Baudrate at which running */
DWORD fBinary: 1; /* Binary Mode (skip EOF check) */
DWORD fParity: 1; /* Enable parity checking */
DWORD fOutxCtsFlow:1; /* CTS handshaking on output */
DWORD fOutxDsrFlow:1; /* DSR handshaking on output */
DWORD fDtrControl:2; /* DTR Flow control */
DWORD fDsrSensitivity:1; /* DSR Sensitivity */
DWORD fTXContinueOnXoff: 1; /* Continue TX when Xoff sent */
DWORD fOutX: 1; /* Enable output X-ON/X-OFF */
DWORD fInX: 1; /* Enable input X-ON/X-OFF */
DWORD fErrorChar: 1; /* Enable Err Replacement */
DWORD fNull: 1; /* Enable Null stripping */
DWORD fRtsControl:2; /* Rts Flow control */
DWORD fAbortOnError:1; /* Abort all reads and writes on Error */
DWORD fDummy2:17; /* Reserved */
WORD wReserved; /* Not currently used */
WORD XonLim; /* Transmit X-ON threshold */
WORD XoffLim; /* Transmit X-OFF threshold */
BYTE ByteSize; /* Number of bits/byte, 4-8 */
BYTE Parity; /* 0-4=None,Odd,Even,Mark,Space */
BYTE StopBits; /* 0,1,2 = 1, 1.5, 2 */
char XonChar; /* Tx and Rx X-ON character */
char XoffChar; /* Tx and Rx X-OFF character */
char ErrorChar; /* Error replacement char */
char EofChar; /* End of Input character */
char EvtChar; /* Received Event character */
WORD wReserved1; /* Fill for now. */
} FTDCB, *LPFTDCB;

Поля начиная с fBinary по fDummy2 - не полные, но в сумме дают 32 бита.
Djaba вне форума Ответить с цитированием
Старый 18.01.2016, 11:56   #20
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

с этой структурой проще.

раз 32 бита, то все они займут 4 байта, и далее все просто.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
доступ к данным packed record bulldog5293 Общие вопросы Delphi 0 07.04.2013 12:59
Доступ к данным packed record Sergey_Murzinov Общие вопросы Delphi 1 27.11.2010 08:02
В чём различие записей Record от Packed Record? Terran Общие вопросы Delphi 7 08.06.2010 17:14
Record / Packed Record Alex Cones Общие вопросы Delphi 7 11.11.2009 10:43
Для чего нужен Packed? VintProg Общие вопросы Delphi 10 03.08.2009 11:21