Заблокирован
1

Передача структуры данных между DLL-ками / DLL - EXE в байтовом виде, влияет ли выравнивание?

19.11.2014, 11:01. Показов 1108. Ответов 0
Метки нет (Все метки)

Here i go again
Допустим есть исполняемый файл EXE и динамическая библиотека DLL.
В DLL в хэдэре каком - каком - нибуть объявляю простой тип данных - структура простых POD данных без указателей типа:
C++
1
2
3
4
5
struct DATA_PACK
{
      int x;
      float y;
};
В EXE файле хочу получить эти данные, но есть одно но.
Для полной независимости DLL от EXE данные передаются через указатель void*, так вот вопрос, если я в теле DLL-ке создал объект типа данных DATA_PACK (динамический или статический), заполнил поля и предоставил EXE_шнику указатель на эти данные, а так же вместе с этим указателем передал текстовую строку семантики самого типа, например: "[INT][FLOAT]". (про то что алокаторы разные у DLL и EXE сейчас речи не идёт - я в курсе и по этому указателю в EXE данные буду только читать)
Так вот, в EXE получил я указатель void* на данные в DLL, а так из описание - [INT][FLOAT], то есть я знаю, что по этому указателю лежит сначала один int, потом один float, могу ли я просто взять и прочитать сначала объём данных размеров int-а и заполнить им нужный свой int какой - то, потом со смещением в размер int-а так же прочитать FLOAT?

Казалось бы, конечно так можно сделать, но ведь компиляторы как - то по разному выравнивают структуры данных и ихние поля в памяти, сработает ли такое чтение во всех 100% случаев корректно?

Добавлено через 24 минуты
Ремарка:
DLL:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct DATA_PACK
{
    int x;
    float y;
    int z;
};
...
void *Module::GetData()
{
    DATA_PACK* dp = new DATA_PACK;
    dp->x = 777;
    dp->y = 222.777f;
    dp->z = 333;
    return dp;
}
EXE:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct DATA_PACK_EXE
{
    int x;
    float y;
    int z;
};
 
...
 
DATA_PACK_EXE* dp = new DATA_PACK_EXE;
void* data = nullptr;
data = module->GetData();
memcpy(dp, data, sizeof(DATA_PACK_EXE));
DLL-ка подключается в рантайме динамический.
Так вот, если просто по указателю из DLL скопировать данные в аналогичную структуру в EXE, то вроде как всё нормально и поля правильно заполняются. (аналогичную структуру в ЕХЕ я взял для простоты, на самом деле данные по ихнему описанию нужно будет читать)

Всё бы хорошо, но для передачи данных таким макаром для каждой транзакции требуется вызов new, что очень накладно по времени в условиях множества высокочастотных транзакций.
Я вот подумал, может можно как - то ускорить этот процесс? Обойти алокацию памяти для передачи каждой транзакции?

Я уж думал, может можно как - то статические переменные (которые без оператора new) передавать из DLL В ЕХЕ ...
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2014, 11:01
Ответы с готовыми решениями:

Передача строк между Dll между Exe
Подскажите алгоритм предачи строк между динамической библиотекой и исполняемым файлом. Мне...

Передача структуры из программы на c# в dll на c++ и получение структуры из dll
В общем проблема в том, что при попытке передачи структуры созданной в c# в dll на c++ происходит...

Передача структуры данных в DLL (stdcall)
Хочу передать данные следующей структуры в DLL: Поле1: Символьный тип, длинной 15 букв (Pole_1:...

Собрать проект MSVS со всеми dll-ками
Привет! есть проектWIN32 MSVS. все работает. как собрать его таким образом, чтобы не требовались...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2014, 11:01

Передача структуры из C# в DLL на C++
Здравствуйте! Вот такой вопросик, можете подсказать варианты передачи структуры в DLL написанную...

DLL для просмотра структуры exe файла
Прошу помощи, в университете задали курсовую работу на тему: DLL для просмотра структуры exe файла....

Передача структуры в dll валит ЕХЕ файл.
Имеется структура в VB Type ST Field1 As String Field2 As Long Field3 As String ...

Возможно ли возвращать данные из dll в виде массива, структуры?
Вобщем...создал я dll запихал туда функции. С прогой слинковал. Данные в dll передал обработал...и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru