Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Перевод структуры с С в Delphi

Автор: velk
Дата сообщения: 20.04.2004 11:06
Есть структура файла
[more]
struct A_pty
{
    unsigned long point_next_rec; // гЄ § вҐ«м -  б«Ґ¤гойго § ЇЁбм 0-3
    unsigned rec_num : 8; // -®¬Ґа § ЇЁбЁ (= 1) 4
    char spare5;
    unsigned long cntrl_proc_id; //6-9
    char pty_stable_state; //10
    char pty_unstable_state; //11
//    unsigned long equipment_nr; // -®¬Ґа ®Ў®а㤮ў -Ёп 12-15
    unsigned equipment_nr;
    char equipment_nr3;
    char spare15;
    char link_rea;
    char event_S12; // б®ЎлвЁҐ S-12 17
    int dial_info; // Ё-д®а¬ жЁп ® ўл§®ўҐ 18-19
//    char network_addr[4]; // -®¬Ґа ®Ў®а㤮ў -Ёп
    char call_subs_info[3]; // 20-22
    char spare23;
    char re_ti_id; //24
    char timer_id; // Ё¤Ґ-вЁдЁЄ в®а в ©¬Ґа  25
    char timer_count; // бзҐвзЁЄ в ©¬Ґа  26
    char audit_count; //27
    unsigned states : 4; //28
    unsigned lang_pos : 4; //28
    struct
    {
        unsigned eos_data_valid : 1;
        unsigned reanswer_allowes : 1;
        unsigned no_answer_expected : 1;
        unsigned incoming_trunk : 1;
        unsigned manual_trunk : 1;
        unsigned talked_on_answer : 1;
        unsigned verify_active : 1;
        unsigned swctrl_failed : 1;
    } b29;
    struct
    {
        unsigned timed_release_active : 1;
        unsigned released_while_on_mixer : 1;
        unsigned swctrl_cong : 1;
        unsigned no_reply_swctrl : 1;
        unsigned cmd_override_active : 1;
        unsigned operator_listen : 1;
        unsigned oper_ass_rq_pen : 1;
        unsigned spare_bit : 1;
    } b30;
    char spare31;
    struct
    {
        unsigned zero1 : 4;
        unsigned dcon : 1;
        unsigned chrg : 1;
        unsigned mast : 1;
        unsigned uni : 1;
        unsigned master: 5;
        unsigned zero2 : 3;
    } cnf_control_A; // гЇа ў«Ґ-ЁҐ Є®дЁЈга жЁҐ© Ђ 32-33
    struct
    {
        unsigned long id;
        unsigned sotrace_nr : 4;
        unsigned subsystem_id: 4;
    } ticket_identity; // Ё¤Ґ-вЁдЁЄ в®а ЄўЁв -жЁЁ 34-38
    char exchange_node;//39
    struct
    {
        unsigned presented_for_tic : 1;
        unsigned asw_sent_automat : 1;
        unsigned asw_sent_manual : 1;
        unsigned rq_to_dna_op_done : 1;
        unsigned real_time_changed : 1;
        unsigned credit_card_verified : 1;
        unsigned mini_tkt_created : 1;
        unsigned charge_data_exist : 1;

        unsigned store_ack_pen : 1;
        unsigned route_del_first : 1;
        unsigned recovered_ticked : 1;
        unsigned historical_retry : 1;
        unsigned charge_amended : 1;
        unsigned periodic_memory : 1;
        unsigned notify_cost_val : 1;
        unsigned notify_time_val : 1;

        unsigned data_acc_error : 1;
        unsigned ticket_not_valid : 1;
        unsigned tkt_in_acsub : 1;
        unsigned bomb_on : 1;
        unsigned stored_failed : 1;
        unsigned con_sub_entered : 1;
        unsigned th3_connected : 1;
        unsigned coinbox_as_payer : 1;

        unsigned crc_check_failed : 1;
        unsigned wur_retrieved : 1;
        unsigned spare : 6;
    } A_rec_inf; // Ё-д®а¬ жЁп Ђ-§ ЇЁбЁ 40-43
    struct
    {
        unsigned pty_was_connect : 1;
        unsigned cli_complete : 1;
        unsigned forward_transf : 1;
        unsigned op_ld_exists : 1;
        unsigned sub_ld_exists : 1;
        unsigned free_of_charge_dna: 1;
        unsigned cannot_be_char : 1;
        unsigned A_nbr_updated : 1;

        unsigned Cbox_sub : 1;
        unsigned Cbox_op : 1;
        unsigned unlisted_pt: 1;
        unsigned A_op_nr_upd: 1;
        unsigned partial_cli: 1;
        unsigned spare: 3;
    } A_sub_inf; // Ё-д®а¬ жЁп  Ў®-Ґ-в  Ђ 44-45
    struct
    {
        unsigned call_cat : 2; // Є вҐЈ®аЁп ўл§®ў 
        // 00 undefined
        // 01 originat Ёб室пйЁ©
        // 10 terminat ўе®¤пйЁ©
        // 11 transit ва -§Ёв
        unsigned circuit_type : 2; // вЁЇ «Ё-ЁЁ
        // 00 undefined
        // 01 line  Ў®-Ґ-вбЄ п «Ё-Ёп
        // 10 autom trunk ᮥ¤Ё-ЁвҐ«м- п «Ё-Ёп
        // 11 manual trunk агз-®© Є - «
        unsigned conversat_with : 2; // ᮥ¤Ё-Ґ-ЁҐ з/§ ®ЇҐа в®а  Ё«Ё -Ґв
        // 00 undefined
        // 01 A_subscr -®¬Ґа  Ў®-Ґ-в 
        // 10 A_operat -®¬Ґа ®ЇҐа в®а 
        // 11 spare
        unsigned direction_of_seizure: 2; // бЇ®б®Ў ᮥ¤Ё-Ґ-Ёп
        // 00 undefined
        // 01 incoming ўе®¤пйЁҐ 楯Ё
        // 10 outgoing Ёб室пйЁҐ 楯Ё
        // 11 spare
    } data_of_A; // ¤ --лҐ  Ў®-Ґ-в  Ђ 46
    char spare47;
    char nr_sub_A[24]; // -®¬Ґа  Ў®-Ґ-в  Ђ 48-71
    struct digit AON_sub_A[10]; // ЂЋЌ  Ў®-Ґ-в  Ђ 72-81
    char num_of_digits; // Є®«ЁзҐбвў® жЁда (0-36) 82
    char count_of_set_sub; // бзҐвзЁЄ - Ў®а  -®¬Ґа   Ў®-Ґ-в (0-255) 83
    char nr_op_A[24]; // -®¬Ґа ®ЇҐа в®а  Ђ 84-107
    struct digit AON_op_A[10]; // ЂЋЌ ®ЇҐа в®а  Ђ 108-117
    char num_of_dig_AON; // Є®«ЁзҐбвў® жЁда ў ЂЋЌ (0-36) 118
    char count_of_set_op; // бзҐвзЁЄ - Ў®а  -®¬Ґа  ®ЇҐа в®а (0-255) 119
    char len_code_zone; // ¤«Ё-  Є®¤  §®-л (0-5) 120
    unsigned sig_type_reqd:4; //121
    unsigned bear_cap :4; //121
    unsigned waiting_time_of_call; // ўаҐ¬п ®¦Ё¤ -Ёп ўл§®ў  ў ®зҐаҐ¤Ё(ᥪ) 122-123
    unsigned system_data:8; // бЁб⥬-лҐ ¤ --лҐ 124
    // 0 INC CALL (NOT ACCEPTED)
    // 1 SET UP CALL
    // 2 NOTIFY CALL
    // 3 T&C RECALL
    // 4 SET UP CALL CHAINED
    // 5 DEFERRED CALL
    // 6 DELAYED CALL
    // 7 HISTORICAL CALL
    // 8 FILE NUMBER CALL
    // 9 CONVERSATION PHASE
    // 10 MONITORING CALL
    // 11 CANCELLED CALL
    // 12 VERIFY CALL
    // 13 COPY OF A TICKET
    // 14 NEW TICKET
    // 15 FORWARD TRANSWER
    // 16 TERMINATED CALL
    // 17-25 SPARE
    // 26-255 NOT USED
    char call_prior; // ЇаЁ®аЁвҐв ўл§®ў  (0-15) 125
    char num_of_parties; // Є®«ЁзҐбвў® бв®а®- (1-30) 126
    unsigned index_of_payer:8; // Ё-¤ҐЄб Ї« вЁ«мйЁЄ (1-30) 127
    stime recovered_time; // 128-131
    struct
    {
        unsigned rd3_cancelled: 1;
        unsigned conference_cancelled: 1;
        unsigned spare1: 1;
        unsigned tkt_retrived_no_act: 1;
        unsigned credit_card_stored: 1;
        unsigned cancelled_data_valid: 1;
        unsigned delay_data_valid: 1;
        unsigned deffer_data_valid: 1;

        unsigned spare2: 5;
        unsigned conf_with_master: 1;
        unsigned spare3: 1;
        unsigned dont_clear_state: 1;
    } ticket_inf; // Ё-д®а¬ жЁп ЄўЁв -жЁЁ 132-133
    unsigned file_nr; // -®¬Ґа д ©«  (0-9999) 134-135
    unsigned route_code; // Є®¤ - Їа ў«Ґ-Ёп (0-32767) 136-137
    unsigned long source_code; // 138-141
    struct
    {
        unsigned month : 8;
        unsigned day : 8;
        unsigned hour : 8;
        unsigned minute : 8;
    } call_acceptance_time; // ўаҐ¬п ЇаЁҐ¬  ўл§®ў  142-145
    unsigned calling_party_cat:8; // Є вҐЈ®аЁп ўл§лў о饩 бв®а®-л (0-255) 146
    unsigned icoming_call_class:8;// ўе®¤пйЁ© Є« бб (0-127) 147
    char cost_limit[7]; // ®Ја -ЁзҐ-ЁҐ ®Ї« вл 148-154
    char spare155;
    unsigned time_limit; // ®Ја -ЁзҐ-ЁҐ ўаҐ¬Ґ-Ё 156-157
    unsigned num_of_monitorings:8; // бзҐвзЁЄ ®Ї.¬®-Ёв®аЁ-Ј  158
    char spare159;
    struct
    {
        unsigned minute : 8;
        unsigned second : 8;
    } total_monitoring_duration; // ®ЎйҐҐ ўаҐ¬п ¬®-Ёв®аЁ-Ј  160-161
    struct
    {
        unsigned op:12;
        unsigned zero:2;
        unsigned ab:1;
        unsigned amd:1;
    } list_op[6]; // бЇЁб®Є ®ЇҐа в®а®ў 162-173
    unsigned last_logic_pos_num; // «®Ј.-®¬Ґа Ї®б«Ґ¤-Ґ© Ї®§ЁжЁЁ 174-175
    struct
    {
        unsigned name:8; // ббл«Є  -  ⥪бв®ўго § ЇЁбм (Ё¬п)
        unsigned addr:8; // ббл«Є  -  ⥪бв®ўго § ЇЁбм ( ¤аҐб)
    } ref_to_A; // 176-177
    unsigned total_text_rec:8; // Є®«-ў® ⥪бв®ўле § ЇЁбҐ© (0-255) 178
    unsigned ref_to_first_comm:8; // ббл«Є  -  1-о § ЇЁбм Є®¬¬Ґ-в аЁп 179
    unsigned total_comm_rec:8; // Є®«-ў® § ЇЁбҐ© Є®¬¬Ґ-в аЁп(0-255) 180
    unsigned total_amen_rec:8; // Є®«-ў® § ЇЁбҐ© Ї®Їа ў®Є (0-255) 181
    unsigned total_data_rec:8; // Є®«-ў® § ЇЁбҐ© ¤ --ле 182
    unsigned carrier:8; // -ҐбгйЁ© 183
    struct
    {
        unsigned FACP:1;
        unsigned MAN:1;
        unsigned RREC:1;
        unsigned MTKT:1;
        unsigned HSC:1;
        unsigned BRC:1;
        unsigned FOR:1;
        unsigned FC:1;
        unsigned PBR:1;
        unsigned S:7;
    } command_cntrl_call_type; // Є®-ва®«м Є®¬ -¤л 184-185
    unsigned long total_cost; // ®Ўй п бв®Ё¬®бвм (0:2**31-1) 186-189
    unsigned long spec_fee; // бв®Ё¬®бвм бЇҐж бЎ®а®ў(0:2**31-1) 190-193
//    float spec_fee;
    unsigned call_handling_time;// 194-195
    char pres_restr_cg; // 196
    unsigned orig_of_cancel:8; // ®в¬Ґ-л ЄўЁв -жЁЁ (0-A, 1-B, 2-OP, 3-SYS) 197
    char reason_of_cancel[4]; // ЇаЁзЁ-  ®в¬Ґ-л 198-201
    char outgoing_call_class[3]; // Ёб室пйЁҐ Є« ббл 202-204
    char xxx[5];//205-209
    struct
    {
        unsigned day : 8;
        unsigned hour : 8;
    } call_ticket_validity; // ўаҐ¬п Їа®ўҐаЄЁ Їа ўЁ«м-®бвЁ ўл§®ў  210-211
    // ®ЇжЁЁ ®в¬Ґ-л (0-after 1-before 2-between 3-not between)
    unsigned defer_option:8; // 212
    struct
    {
        unsigned hour1 : 8;
        unsigned minute1 : 8;
        unsigned day1 : 8;
        unsigned month1 : 8;
        unsigned hour2 : 8;
        unsigned minute2 : 8;
        unsigned day2 : 8;
        unsigned month2 : 8;
        unsigned year : 8;
    } defer_time; // Ї а ¬Ґвал ®вба®зЄЁ 213-221
    unsigned last_delay_option:8; // ®ЇжЁЁ § ¤Ґа¦ЄЁ 222
    // 0 - REALATIVE TIME
    // 1 - ABSOLUTE TIME
    // 2 - ROUTE
    // 3 - CONFERENCE BRIDGE
    // 4 - OPERATOR FILE NUMBER
    // 5 - SUBSCRIBE FILE NUMBER
    union
    {
        struct
        {
            unsigned priority:8;
            unsigned long legs;
        } partic;
        struct
        {
            unsigned v:8;
            unsigned long spare;
        } route;
        struct
        {
            unsigned hour :8;
            unsigned minute :8;
            unsigned day : 8;
            unsigned month : 8;
            unsigned year : 8;
        } time;
    } delay_data; // Ї а ¬Ґвал § ¤Ґа¦ЄЁ 223-227
    char time_zone; // ўаҐ¬Ґ-- п §®-  228
    char index_of_region; // Ё-¤ҐЄб ॣЁ®-  229
    bit_fld call_type; // вЁЇ ўл§®ў  230
    bit_fld exch_type; // вЁЇ бв -жЁЁ 231
/*    struct
    {
        unsigned CHN : 1;
        unsigned DAT : 1;
        unsigned CNF : 1;
        unsigned MPY : 1;
        unsigned RD3 : 1;
        unsigned CLR : 1;
        unsigned EFT : 1;
        unsigned IFT : 1;
        unsigned TRA : 1;
        unsigned APP : 1;
        unsigned RBA : 1;
        unsigned SP5 : 1;
        unsigned SP4 : 1;
        unsigned SP3 : 1;
        unsigned SP2 : 1;
        unsigned SP1 : 1;
    } call_cat; // Є вҐЈ®аЁп ўл§®ў  232-233*/
    unsigned char call_cat[2];
    struct
    {
        unsigned sub : 4;
        unsigned pos_op : 4;
        unsigned op : 4;
        unsigned pos_sub : 4;
    } lang_digits;                         // жЁдал п§лЄ  234-235
    unsigned excess_of_connect;// ЇаҐўлиҐ-ЁҐ в ©¬Ґа  ᮥ¤Ё-Ґ-Ёп 236-237
    unsigned excess_of_clear; // ЇаҐўлиҐ-ЁҐ в ©¬Ґа  ®бў®Ў®¦¤Ґ-Ёп Ї®§ЁжЁЁ 238-239
    char spare240_241[2];
    stime date_delay; // ¤ в  ®в¬Ґ-л 242-245
    char year_delay; // Ј®¤ ®в¬Ґ-л (0-99) 246
    char spare247_253[7];
};
[/more]
Как перевести в струтуру на синтаксис Delphi
Автор: Mamay
Дата сообщения: 20.04.2004 12:40
ИМХО неиначе как record-ами...
Автор: Sleepwalker
Дата сообщения: 20.04.2004 13:09
ну да... особенно если это структура именно файла...
Автор: velk
Дата сообщения: 20.04.2004 13:17
Это струтура файла..
Но я нифига не знаю Си
Подскажите хоть что на что менять то....Пожалуйста
Автор: Kernel Panic
Дата сообщения: 20.04.2004 13:39
поищи в инете таблицу соответствия типов C++ и Delphi (я такую видел, но урл не помню) и потихоньку конверти.
Автор: Sleepwalker
Дата сообщения: 20.04.2004 15:47
- unsigned long point_next_rec;
longword
- unsigned rec_num : 8;
byte (в данном случае, т.к. 8 бит. и все подобные штуки - это, я так понимаю, битовые маски)
- char spare5;
char
- unsigned equipment_nr;
здесь пойдет boolean
- int dial_info;
integer
- char call_subs_info[3]; // 20-22
string[3]
- unsigned states : 4; //28
- unsigned lang_pos : 4; //28
вот эти поля по 4 бита... хз, можно в byte объединить, иначе никак вроде...
или отдельную запись на 4 бита.

struct
{
unsigned eos_data_valid : 1;
unsigned reanswer_allowes : 1;
unsigned no_answer_expected : 1;
unsigned incoming_trunk : 1;
unsigned manual_trunk : 1;
unsigned talked_on_answer : 1;
unsigned verify_active : 1;
unsigned swctrl_failed : 1;
} b29;

насчитал 8, следовательно - byte

{unsigned zero1 : 4;
unsigned dcon : 1;
unsigned chrg : 1;
unsigned mast : 1;
unsigned uni : 1;
unsigned master: 5;
unsigned zero2 : 3;
} cnf_control_A;

два по 8, word.

struct
{
unsigned long id;
unsigned sotrace_nr : 4;
unsigned subsystem_id: 4;
} ticket_identity;

два по 4 - byte

ну и другие структуры - по аналогии. можно делать точно так же
xxx=record
xxx1:boolean;
xxx2:boolean;
...
xxx8:boolean;
end;
а можно все в один байт, но потом тебе самому смотреть надо, где чего...

struct
{
unsigned call_cat : 2; // Є ⥣®аЁп ўл§®ў
// 00 undefined
// 01 originat Ёб室пйЁ©
// 10 terminat ўе®¤пйЁ©
// 11 transit ва ­§Ёв
unsigned circuit_type : 2; // вЁЇ «Ё­ЁЁ
// 00 undefined
// 01 line Ў®­Ґ­вбЄ п «Ё­Ёп
// 10 autom trunk ᮥ¤Ё­ЁвҐ«м­ п «Ё­Ёп
// 11 manual trunk агз­®© Є ­ «
unsigned conversat_with : 2; // ᮥ¤Ё­Ґ­ЁҐ з/§ ®ЇҐа в®а Ё«Ё ­Ґв
// 00 undefined
// 01 A_subscr ­®¬Ґа Ў®­Ґ­в
// 10 A_operat ­®¬Ґа ®ЇҐа в®а
// 11 spare
unsigned direction_of_seizure: 2; // бЇ®б®Ў ᮥ¤Ё­Ґ­Ёп
// 00 undefined
// 01 incoming ўе®¤пйЁҐ 楯Ё
// 10 outgoing Ёб室пйЁҐ 楯Ё
// 11 spare
} data_of_A;

в целом 8 бит, можно опять же в один байт, а вот как разбить на двухбитные поля - это я ХЗ...

- char nr_sub_A[24];
string[24]
- struct digit AON_sub_A[10];
array[1..10] of (чего-то, че такое digit - не знаю)

ну и далее по аналогии... смысл понятен?
а еще вариант: возьми типы в сях (это не сложно найти) и типа в Делфях... и поехал...
Автор: velk
Дата сообщения: 20.04.2004 15:54
Спасибо буду разбираться
Автор: redp
Дата сообщения: 20.04.2004 16:13
2Sleepwalker
я кстати не уверен что вот такое

Код:
xxx=record
xxx1:boolean;
xxx2:boolean;
...
xxx8:boolean;
end;
Автор: ShIvADeSt
Дата сообщения: 21.04.2004 00:50
Посмотри на vvv.astonshell.com/rus там есть утилита которая переводит с С на Дельфи, достаточно качесвтенно
Автор: Sleepwalker
Дата сообщения: 21.04.2004 09:18
redp
нда уж... действительно... в файле boolean занимает 1 байт... тогда надо брать целочисленный и ручками конвертить...
Автор: ShIvADeSt
Дата сообщения: 05.11.2004 01:11
Нашел вот такую запись для уменьшния размера файла
на Дельфи таких комманд не нашел, мож кто знает

Цитата:

#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/FILEALIGN:512 /SECTION:.text,EWRX /IGNORE:4078")
#pragma comment(linker,"/ENTRY:New_WinMain")
#pragma comment(linker,"/NODEFAULTLIB")
// в итоге можно получить exe-файл размером примерно в 4 Кб

Автор: WiseAlex
Дата сообщения: 05.11.2004 10:13
ShIvADeSt
ОСновной выйгрыш идет здесь:
Цитата:
#pragma comment(linker,"/NODEFAULTLIB")
-это отключение использования crt библиотеки, думаю что-то похожее есть и в delphi
----
А тема точно правильная?
Автор: ShIvADeSt
Дата сообщения: 06.11.2004 00:59

Цитата:
-это отключение использования crt библиотеки, думаю что-то похожее есть и в delphi

Это я знаю

Цитата:
А тема точно правильная?

Вообще то, это не структура, но чтобы не создавать новый топик, я поместил в этом, тем более, что здесь тоже требуется перевести с одного языка на другой. А вообще надо наверное создать общмй топик, о переводе кода с одного языка на другой.
Автор: ShIvADeSt
Дата сообщения: 24.06.2005 08:44
Есть структура

Цитата:

struct
{
int _settings_struct_size;
int _mark_version;
UCHAR bitStorage[NumStorage];
WINDOWPLACEMENT m_wndpl;
UCHAR _guiLanguage; // interface language 0 - RU, 1 - Eng, ...
DWORD _BkGrColor; // цвет фона документа
DWORD _FontColor; // цвет шрифта
RECT _printMargins; // отступы (поля) при печати
CHARFORMAT _DOSfont; // фонт DOS
CHARFORMAT _WINfont; // фонт Win
CHARFORMAT _KOIfont; // фонт KOI
int _lastTimeDateChoice;
char _szAssociatedTypes[128];
UCHAR _changedAccels; // есть ли измененные хоткеи и сколько
POINT _FindDlgPos;
} appSettings;

я перевел это на дельфи следующим образом

Цитата:

TCharFormat = record
cbSize: UINT;
dwMask: Longint;
dwEffects: Longint;
yHeight: Longint;
yOffset: Longint;
crTextColor: TColorRef;
bCharSet: Byte;
bPitchAndFamily: Byte;
szFaceName: array[0..LF_FACESIZE-1] of WideChar;
end;

TAppSettings=record
SetStructSize:integer;
MarkVersion:integer;
BitStorage:array[0..8] of Byte;
WndPlmt:TWINDOWPLACEMENT;
GuiLanguage:Byte;
BkGrColor:DWORD;
FontColor:DWORD;
PrintMargins:TRect;
DosFont:TCharFormat;
WinFont:TCharFormat;
KOIFont:TCharFormat;
LastTimeDateChoice:integer;
AssocTypes:array[0..127] of char;
ChangedAccles:Byte;
FindDlgPos:TPoint;
end;

В итоге, даже при указании того, что используется WideChar и вроде все правильно прописал размер первой структуры 512 байт, размер второй 508. В результате я читаю эту структуру из реестра и получаю в строках мусор. Читаю все правильно, проблема в переводе структуры. Где то я потерял 4 байта. Причем надо точно знать где.

Добавлено:
Разобрался в чем проблема в дельфи

Цитата:

typedef struct _WINDOWPLACEMENT { // wndpl
UINT length;
UINT flags;
UINT showCmd;
POINT ptMinPosition;
POINT ptMaxPosition;
RECT rcNormalPosition;
} WINDOWPLACEMENT;

объявлена так

Цитата:

PWindowPlacement = ^TWindowPlacement;
{$EXTERNALSYM tagWINDOWPLACEMENT}
tagWINDOWPLACEMENT = packed record
length: UINT;
flags: UINT;
showCmd: UINT;
ptMinPosition: TPoint;
ptMaxPosition: TPoint;
rcNormalPosition: TRect;
end;
TWindowPlacement = tagWINDOWPLACEMENT;
{$EXTERNALSYM WINDOWPLACEMENT}
WINDOWPLACEMENT = tagWINDOWPLACEMENT;

и из-за того, что использовался packed record 4 байта терялись, в итоге мусор. Переопределил структуру и все ок.
Автор: eMASTER
Дата сообщения: 16.02.2006 10:28
Кто знает как перевести такую строку из С++ в Delphi???

Код:
PRINTER_INFO_2* pi2;
...
UDC_DEVMODE_NT* dm_nt = (UDC_DEVMODE_NT*)( pi2->pDevMode );
Автор: bandyn
Дата сообщения: 16.02.2006 21:49
Это конечно все хорошо из C++ в Delphi....

Но у меня вопрос всё наоборот...
Я пишу на BCB С++ 6
Часто приходится переводить именно с Delphi на C++
Может есть какие-нибудь конвертеры?
Где найти таблицы соответствий?
Автор: ShIvADeSt
Дата сообщения: 17.02.2006 01:03
eMASTER

Цитата:
UDC_DEVMODE_NT и PDeviceModeA

что то я не нашел первого типа в хэдерах дельфи, мож он у тебя не на присваивание ругается, а на то, что тип не знает, дай описание типа, разберемся.
Автор: WiseAlex
Дата сообщения: 17.02.2006 09:51
bandyn

Цитата:
Может есть какие-нибудь конвертеры?

Вот первое, что выдал google. А вот здесь схожий софт еще и продают
Автор: eMASTER
Дата сообщения: 17.02.2006 10:25
ShIvADeSt
Вот смотри...
Вот так она выглядела в С++:

Код:
typedef struct _devicemode_nt {
BCHAR dmDeviceName[CCHDEVICENAME];
WORD dmSpecVersion;
WORD dmDriverVersion;
WORD dmSize;
WORD dmDriverExtra;
DWORD dmFields;
union {
struct {
short dmOrientation;
short dmPaperSize;
short dmPaperLength;
short dmPaperWidth;
};
POINTL dmPosition;
};
short dmScale;
short dmCopies;
short dmDefaultSource;
short dmPrintQuality;
short dmColor;
short dmDuplex;
short dmYResolution;
short dmTTOption;
short dmCollate;
BCHAR dmFormName[CCHFORMNAME];
WORD dmLogPixels;
DWORD dmBitsPerPel;
DWORD dmPelsWidth;
DWORD dmPelsHeight;
union {
DWORD dmDisplayFlags;
DWORD dmNup;
};
DWORD dmDisplayFrequency;

DWORD dmICMMethod;
DWORD dmICMIntent;
DWORD dmMediaType;
DWORD dmDitherType;
DWORD dmReserved1;
DWORD dmReserved2;

DWORD dmPanningWidth;
DWORD dmPanningHeight;

} DEVMODE_NT;



typedef struct tagUDC_DEVMODE_NT
{
    DEVMODE_NT dm;
    //
    DWORD reserved_1; // internally used, do not change
    DWORD reserved_2; // internally used, do not change
    DWORD        reserved_3; // internally used, do not change
    DWORD        reserved_4; // internally used, do not change
    DWORD        reserved_5; // internally used, do not change
    BOOL        reserved_6; // internally used, do not change
    BOOL        reserved_7; // internally used, do not change
    DWORD        reserved_8; // internally used, do not change
    DWORD        reserved_9; // internally used, do not change
    DWORD        reserved_10; // internally used, do not change
    
    DWORD            m_nFormat; // output file format code (see enum eFormats)
    // settings for each format
    FORMAT_BMP        m_fBMP;
    FORMAT_GIF        m_fGIF;
    FORMAT_JPG        m_fJPG;
    FORMAT_TIFF        m_fTIFF;
    FORMAT_PCX        m_fPCX;
    FORMAT_DCX        m_fDCX;
    //
    BOOL            m_bRunApp;     // TRUE if an application is to be run when finishing printing,
                        // FALSE otherwise
    BOOL            m_bRunCustom;     // if TRUE, a custom application specified
                        //    with fields m_sAppName and m_sAppParams is to be run,
                        //    FALSE yields default application (associated with the image file type) running
    WCHAR            m_sImagePath[MAX_PATH]; // path to create image file
    WCHAR            m_sImageName[MAX_PATH]; // Image file name masks for image created by Universal Document Converter
                            // while printing documents
    WCHAR            m_sAppName[MAX_PATH];    // specifies custom application filename (with full path),
                            // actual only if m_bRunCustom is TRUE
    WCHAR            m_sAppParams[MAX_PATH]; // custom application command line parameters
    WCHAR            m_sProfComment[512];    // internally used, should not be changed
} UDC_DEVMODE_NT, FAR *PUDC_DEVMODE_NT;
Автор: ItsJustMe
Дата сообщения: 17.02.2006 10:42
Так. Первое.
BCHAR dmDeviceName[CCHDEVICENAME];
нельзя делать
dmDeviceName: String[CCHDEVICENAME];
надо
dmDeviceName: array [0..CCHDEVICENAME-1] of WideChar;

WORD = short = ShortInt, not Interger. WORD, вообще-то unsigned, на для тебя это несущественно.

В UDC_DEVMODE_NT ты со строками правильно разделался В первой так же сделай. Я, правда не уверен, что BCHAR=WCHAR, а не CHAR. Если он CHAR, то соответственно заменишь WideChar на Char
Автор: eMASTER
Дата сообщения: 17.02.2006 10:59
ItsJustMe
Спасибо за помощь...
По поводу BCHAR

Код:
#ifdef UNICODE
typedef WCHAR BCHAR;
#else
typedef BYTE BCHAR;
#endif
Автор: ItsJustMe
Дата сообщения: 17.02.2006 13:59
А зачем вспоминаешь? Выкинь ее, пиши на VS!
А типы данных у нее в хелпе очень подробно расписаны.

Страницы: 1

Предыдущая тема: IdFTP в Indy


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.