|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.01.2016, 10:50 | #11 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
ТС, у вас внешнее АПИ?
или просто портируете код? Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
18.01.2016, 10:57 | #12 |
Регистрация: 17.01.2016
Сообщений: 8
|
Ну как бы я ее в самом первом своем сообщении написал, в вопросе данной ветки. Есть структура, написанная на С++. Нужно перевести на делфи. Есть внешнее устройство, к нему драйвера и DLL, написанная на плюсах. А работать нужно в среде делфи.
|
18.01.2016, 11:05 | #13 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
ну тогда да, ручками, со смещениями.
вы можете сделать класс. чтоб работать с ним, а он потом вернет вам структуру эту(она по сути два DWORD по размеру) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
18.01.2016, 11:07 | #14 |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
а поле cbInQue имеет какой размер?
Или вся структура сколько байт получается? 64 или 45 + sizeof(DWORD) = 67? Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
18.01.2016, 11:23 | #15 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
12 байт там поидее, три DWORD
я обсчитался. Цитата:
тут трудность в том что надо строго знать кто что занимает. в частности по адресам: Код:
но выяснить можно в принципе. ибо я не уверен в поведении компилятора, либо он начнет поле что не влезла с нового DWORD, либо он берет частично и потом выравнивает. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 18.01.2016 в 11:29. |
|
18.01.2016, 11:27 | #16 | |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
Цитата:
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
|
18.01.2016, 11:29 | #17 |
Регистрация: 17.01.2016
Сообщений: 8
|
Предполагаю, что cbInQue имеет полный размер - 32 бита. Обычно, подобные структуры дополняются полем типа
DWORD fReserved : 5; которе бы дополняло размер всей структуры до какой либо кратности:8,16,32 бит, но не использовалось в программе. Нужно пробовать. Если устройство даст адекватный ответ, то так оно и есть. |
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 |
Регистрация: 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 бита. |
18.01.2016, 11:56 | #20 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
с этой структурой проще.
раз 32 бита, то все они займут 4 байта, и далее все просто. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
доступ к данным 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 |