Аватар для 6a6kin
232 / 102 / 5
Регистрация: 18.04.2010
Сообщений: 294

Взаимодействие cpp-dll и delphi-программы

12.11.2010, 23:45. Показов 1859. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть программа, написанная на делфи, а также две длл: одна на с++, другая на делфи.
Программа передает параметр - указатель packed record.
Delphi
1
2
3
4
5
6
7
8
9
PToRec = ^TRec;
  TRec = packed record
    mybool: Boolean;
    dt: TDateTime;
    s1: String[20];
    s2: String[54];
    s3: String[26];
    num: Integer;
  end;
Экспортируемая функция принимает этот указатель и интерпретирует его как структуру вида:
C++
1
2
3
4
5
6
7
8
9
10
11
#pragma pack(push, 2)
struct data
{
    bool        b1;
    double     d1;
    char        s1[21];
    char        s2[55];
    char        s3[27];
    int          i1;
};
#pragma pack(pop)
Однако, при заполнении структуры в cpp-длл, программа неправильно обрабатывает поля структуры(скорее всего, не совпадают адреса полей в спп и делфи)

Кто может подсказать, что неправильно и как правильно продебажить это дело? Исходников программы нету.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.11.2010, 23:45
Ответы с готовыми решениями:

Взаимодействие между cpp файлами в VS 2013
Здравтсвуйте, я хочу чтобы в vs13 и не только можно было размещать функции по файлам, иногда это улучшает читабельность или скажем мне надо...

Разделение программы на .h .cpp .cpp
Никак не пойму как правильно разделять программу на несколько файлов. Вот код : ( в чем проблема ? ) main.cpp #include...

Dll на Cpp 6.0 не работает в VB
Как сделать чтобы функция в dll возвращала в VB СТРОКУ ??? return 'abc'; в VB получает ''(пусто)!? (без ошибок, тип LPSTR или...

6
 Аватар для 6a6kin
232 / 102 / 5
Регистрация: 18.04.2010
Сообщений: 294
15.11.2010, 21:52  [ТС]
Есть хоть какие идеи?
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
17.11.2010, 03:54
Может потому, что в Си приходится для каждой строки дополнительно выделять один байт под символ '\0'?
0
 Аватар для 6a6kin
232 / 102 / 5
Регистрация: 18.04.2010
Сообщений: 294
17.11.2010, 23:51  [ТС]
Размер совпадает, да и сами поля не до предела заполнены. Да и как тогда объяснить, что double или int тоже неправильно обрабатывает?

Не по теме:

А вообще, когда читал про соответствие делфи и Си строк, кто-то писал, что строки в делфи тоже должны заканчиваться нулом, только программисту не нужно об этом заботиться.

0
Формучанин
364 / 296 / 42
Регистрация: 02.11.2010
Сообщений: 1,245
18.11.2010, 00:57
использовать shortstring вместо string

Добавлено через 3 минуты
хотя нет, лучше массив символов

Добавлено через 3 минуты
Delphi
1
2
3
4
5
6
7
8
 TRec = packed record
    mybool: Boolean;
    dt: TDateTime;
    s1: array[0..20] of char;
    s2: array[0..54] of char;
    s3: array[0..26] of char;
    num: Integer;
  end;
0
18.11.2010, 03:02

Не по теме:

Цитата Сообщение от 6a6ka Посмотреть сообщение
Размер совпадает, да и сами поля не до предела заполнены. Да и как тогда объяснить, что double или int тоже неправильно обрабатывает?

Не по теме:

А вообще, когда читал про соответствие делфи и Си строк, кто-то писал, что строки в делфи тоже должны заканчиваться нулом, только программисту не нужно об этом заботиться.

Это было лишь скромное предположение

0
 Аватар для 6a6kin
232 / 102 / 5
Регистрация: 18.04.2010
Сообщений: 294
24.11.2010, 00:07  [ТС]
Я считаю, что все дело в packed. Скорее всего алгоритмы цпп и делфи различны. Однако моих скудных знаний не хватает, чтобы проверить это.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.11.2010, 00:07
Помогаю со студенческими работами здесь

Есть три файла. файл main.cpp и Source.cpp знают только Header.h, так как он подключен. как же подключается Source.cpp
main.cpp #include <iostream> #include"Header.h" using namespace std; int main() { A ob; ob.f(); return...

Взаимодействие ПК с внешним устройством через DLL и ошибка Lvalue required
Добрый вечер! Пишу программу взаимодействия ПК с внешним устройством через DLL. Инициализацию я сделал, устройство подключается...

Компиляция .cpp-файлов из программы
Доброго времени суток! Имеется VS 2013 и .cpp файлы. Задача - написать свою программу, которая будет по очереди компилировать эти файлы,...

Взаимодействие с DLL написанной на CPP
Здравствуй уважажаемый All! Помогите пожайлуста решить такую вот задачу. Есть библиотека написанная на CPP, в ней есть две ф-ции,...

Взаимодействие программы Delphi с расширением в браузере(-ах)
Привет всем. Задумался одной программой и пытаюсь её реализовать. Программа должна как-то взаимодействовать с работающим расширением в...


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

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

Новые блоги и статьи
EmBitz, создание проекта, отладка, прошивка
locm 15.07.2025
Создание проекта для Blue Pill (STM32F103C8T6) в EmBitz 2. 30, написания кода blink, запуск отладки в ОЗУ, заливка релизной прошивки во flash используя ST-Link и др. . . .
Трассировка корутин Kotlin с OpenTelemetry
mobDevWorks 14.07.2025
Асинхронное программирование меняет правила игры, особенно когда речь заходит о трассировке операций. В Kotlin с его корутинами эта проблема приобретает особый оттенок, который я хотел бы детально. . .
Облачные приложения на Rust: руководство по архитектуре микросервисов
golander 13.07.2025
Когда я впервые взялся за проектирование облачной платформы для одного из наших клиентов, выбор стоял между привычными Go и Java. Но после нескольких месяцев разработки микросервисной системы,. . .
Как Node.js выполняет асинхронные операции
Reangularity 13.07.2025
Каждый раз, когда я рассказываю про Node. js, возникает один и тот же вопрос: "Как эта штука может быть быстрой, если JavaScript — однопоточный язык?" И это действительно кажется парадоксом. Ведь в. . .
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru