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

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

19.11.2014, 11:01. Показов 1693. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.11.2014, 11:01
Ответы с готовыми решениями:

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

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

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.11.2014, 11:01
Помогаю со студенческими работами здесь

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

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

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

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

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


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

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

Новые блоги и статьи
Аутентификация OAuth в Python
py-thonny 22.05.2025
OAuth (Open Authorization) — это целый стандарт для делегированного доступа. Звучит занудно? Давайте проще: OAuth позволяет приложениям получать доступ к информации пользователя на сторонних сервисах. . .
Хеширование и соль паролей в веб-приложениях C#
stackOverflow 22.05.2025
Когда-то в начале своей карьеры я тоже грешил простейшими подходами к хранению паролей – MD5-хеширование казалось верхом защиты. Но технологии не стоят на месте, вычислительные мощьности растут, и. . .
Генераторы Python для эффективной обработки данных
AI_Generated 21.05.2025
В Python существует инструмент настолько мощный и в то же время недооценённый, что я часто сравниваю его с тайным оружием в арсенале программиста. Речь идёт о генераторах — одной из самых элегантных. . .
Чем заменить Swagger в .NET WebAPI
stackOverflow 21.05.2025
Если вы создавали Web API на . NET в последние несколько лет, то наверняка сталкивались с зелёным интерфейсом Swagger UI. Этот инструмент стал практически стандартом для документирования и. . .
Использование Linq2Db в проектах C# .NET
UnmanagedCoder 21.05.2025
Среди множества претендентов на корону "идеального ORM" особое место занимает Linq2Db — микро-ORM, балансирующий между мощью полноценных инструментов и легковесностью ручного написания SQL. Что. . .
Реализация Domain-Driven Design с Java
Javaican 20.05.2025
DDD — это настоящий спасательный круг для проектов со сложной бизнес-логикой. Подход, предложенный Эриком Эвансом, позволяет создавать элегантные решения, которые точно отражают реальную предметную. . .
Возможности и нововведения C# 14
stackOverflow 20.05.2025
Выход версии C# 14, который ожидается вместе с . NET 10, приносит ряд интересных нововведений, действительно упрощающих жизнь разработчиков. Вы уже хотите опробовать эти новшества? Не проблема! Просто. . .
Собеседование по Node.js - вопросы и ответы
Reangularity 20.05.2025
Каждому разработчику рано или поздно приходится сталкиватся с техническими собеседованиями - этим стрессовым испытанием, где решается судьба карьерного роста и зарплатных ожиданий. В этой статье я. . .
Cython и C (СИ) расширения Python для максимальной производительности
py-thonny 20.05.2025
Python невероятно дружелюбен к начинающим и одновременно мощный для профи. Но стоит лишь заикнуться о высокопроизводительных вычислениях — и энтузиазм быстро улетучивается. Да, Питон медлительнее. . .
Безопасное программирование в Java и предотвращение уязвимостей (SQL-инъекции, XSS и др.)
Javaican 19.05.2025
Самые распространёные векторы атак на Java-приложения за последний год выглядят как классический "топ-3 хакерских фаворитов": SQL-инъекции (31%), межсайтовый скриптинг или XSS (28%) и CSRF-атаки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru