purebasic.info

PureBasic forum
Текущее время: Пт апр 20, 2018 10:51 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: C++ to PB Структура из структуры
СообщениеДобавлено: Пт ноя 24, 2017 1:04 pm 
Не в сети
доцент

Зарегистрирован: Вт дек 11, 2012 9:14 pm
Сообщений: 45
Благодарил (а): 19 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Добрый день!
Просьба проверить правильно ли переделаны структуры из C++ в PB

Две связанные между собой структуры на С++ (с комментариями)
C++
Код:
1
2
3
4
5
6
7
8
9
10
11
12
typedef struct _SCONFIG
{      
        unsigned long Parameter;                // Name of parameter
        unsigned long Value;                    // Value of the parameter
} SCONFIG;
 
typedef struct _SCONFIG_LIST
{
        unsigned long NumOfParams;              // Number of SCONFIG elements
        SCONFIG *ConfigPtr;                     // Array of SCONFIG
} SCONFIG_LIST;
 


А вот так я переделал для PB
PureBasic
Код:
1
2
3
4
5
6
7
8
9
10
Structure SCONFIG
Parameter.l             ; Name of parameter
Value.l                 ; Value of the parameter
EndStructure
 
Structure SCONFIG_LIST
NumOfParams.l           ; Number of SCONFIG elements
*ConfigPtr.SCONFIG      ; Array of SCONFIG
EndStructure
 


Все правильно?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: C++ to PB Структура из структуры
СообщениеДобавлено: Пт ноя 24, 2017 1:34 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 771
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 11 раз.
Пункты репутации: 0
Вроде бы да, хотя вот это смущает. // Array of SCONFIG
Только я бы сделал так.
Код:
1
2
3
4
5
6
7
8
9
Structure SCONFIG
Parameter.i             ; Name of parameter
Value.i                  ; Value of the parameter
EndStructure
 
Structure SCONFIG_LIST
NumOfParams.i           ; Number of SCONFIG elements
*ConfigPtr.SCONFIG      ; Array of SCONFIG
EndStructure


Так как в x64 бывают проблемы.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: C++ to PB Структура из структуры
СообщениеДобавлено: Пт ноя 24, 2017 3:26 pm 
Не в сети
доцент

Зарегистрирован: Вт дек 11, 2012 9:14 pm
Сообщений: 45
Благодарил (а): 19 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Спасибо.
Теперь у меня более наглый вопрос, не хватает мозгов, как из этого получить общую переменную configList?

C коде C++ сделано так:

Code C++
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        SCONFIG         config[2];
 
        SCONFIG_LIST    configList;
 
        configList.ConfigPtr = config;
 
        configList.NumOfParams = 0;
       
        config[configList.NumOfParams].Parameter = 1;
 
        config[configList.NumOfParams].Value = 50;
       
        configList.NumOfParams++;
       
        config[configList.NumOfParams].Parameter = 23;
 
        config[configList.NumOfParams].Value = 80;
       
        configList.NumOfParams++;
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: C++ to PB Структура из структуры
СообщениеДобавлено: Пт ноя 24, 2017 3:46 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11108
Благодарил (а): 4 раз.
Поблагодарили: 395 раз.
Все же правильнее Long, а не Integer.

Gipopotam писал(а):
как из этого получить общую переменную configList
Код:
1
2
3
4
5
6
7
8
9
10
11
Structure SCONFIG Align #PB_Structure_AlignC
  Parameter.l             ; Name of parameter
  Value.l                 ; Value of the parameter
EndStructure
 
Structure SCONFIG_LIST Align #PB_Structure_AlignC
  NumOfParams.l           ; Number of SCONFIG elements
  *ConfigPtr.SCONFIG      ; Array of SCONFIG
EndStructure
 
configList.SCONFIG_LIST


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: C++ to PB Структура из структуры
СообщениеДобавлено: Пт ноя 24, 2017 4:11 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 567
Благодарил (а): 2 раз.
Поблагодарили: 31 раз.
Пункты репутации: 9
Gipopotam писал(а):
Спасибо.
Теперь у меня более наглый вопрос, не хватает мозгов, как из этого получить общую переменную configList?

C коде C++ сделано так:

Code C++
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        SCONFIG         config[2];
 
        SCONFIG_LIST    configList;
 
        configList.ConfigPtr = config;
 
        configList.NumOfParams = 0;
       
        config[configList.NumOfParams].Parameter = 1;
 
        config[configList.NumOfParams].Value = 50;
       
        configList.NumOfParams++;
       
        config[configList.NumOfParams].Parameter = 23;
 
        config[configList.NumOfParams].Value = 80;
       
        configList.NumOfParams++;
 


Что то типа такого. :roll:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
Structure SCONFIG
Parameter.i             ; Name of parameter
Value.i                  ; Value of the parameter
EndStructure
 
Structure SCONFIG_LIST
NumOfParams.i           ; Number of SCONFIG elements
 *ConfigPtr.SCONFIG   ; Array of SCONFIG
EndStructure
 
 
    Global Dim config.SCONFIG(2);
 
     Global configList.SCONFIG_LIST    
 
        configList\ *ConfigPtr.SCONFIG = @config(0)
 
        configList\NumOfParams = 0;
       
        config(configList\NumOfParams)\Parameter = 1;
 
        config(configList\NumOfParams)\Value = 50;
       
        configList\NumOfParams+1
       
        config(configList\NumOfParams)\Parameter = 23;
 
        config(configList\NumOfParams)\Value = 80;
       
        configList\NumOfParams+1
 
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: C++ to PB Структура из структуры
СообщениеДобавлено: Пт ноя 24, 2017 4:41 pm 
Не в сети
доцент

Зарегистрирован: Вт дек 11, 2012 9:14 pm
Сообщений: 45
Благодарил (а): 19 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Сергейчик писал(а):
Что то типа такого. :roll:
Да, похоже на то что нужно, спасибо. Только компилятор ругается на эту строку
Код:
1
configList\*ConfigPtr.SCONFIG = @config(0)


Говорит отсутствует поле структуры. Если убрать указатель пред *ConfigPtr, то компилится без ошибок.
Пробовал выравнивать структуры как предложил Петр,
Код:
1
Align #PB_Structure_AlignC

но все равно ругается на отсутствие поля структуры.
Кстати в оригинальном коде С++ поля структуры выровнены так:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
#pragma pack(push,1)
typedef struct _SCONFIG_LIST
{
        unsigned long NumOfParams;              // Number of SCONFIG elements
        SCONFIG *ConfigPtr;                             // Array of SCONFIG
} SCONFIG_LIST;
 
typedef struct _SBYTE_ARRAY
{
        unsigned long NumOfBytes;               // Number of bytes in the array
        unsigned char *BytePtr;                 // Array of bytes
} SBYTE_ARRAY;
#pragma pack(pop)



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: C++ to PB Структура из структуры
СообщениеДобавлено: Пт ноя 24, 2017 5:04 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11108
Благодарил (а): 4 раз.
Поблагодарили: 395 раз.
Gipopotam писал(а):
Только компилятор ругается на эту строку
Должно быть без звездочки.

Gipopotam писал(а):
Кстати в оригинальном коде С++ поля структуры выровнены так
Выравнивания нет, поэтому #PB_Structure_AlignC не нужно.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB