Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
6a6kin
232 / 102 / 2
Регистрация: 18.04.2010
Сообщений: 295
#1

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

12.11.2010, 23:45. Просмотров 1133. Ответов 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-длл, программа неправильно обрабатывает поля структуры(скорее всего, не совпадают адреса полей в спп и делфи)

Кто может подсказать, что неправильно и как правильно продебажить это дело? Исходников программы нету.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2010, 23:45     Взаимодействие cpp-dll и delphi-программы
Посмотрите здесь:

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

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

При разбиении программы на *.cpp, *.h - файлы программа не компилируется. - C++
Если собрать всё в zadacha.cpp, то всё хорошо компилируется. Но если разбить на файлы - ошибка компилятора. В чём проблема? ...

Взаимодействие программы и ОС - C++
Помогите мне описать, пожалуйста, подробнее - как взаимодействуют между собой эта программа и операционная система?Прям очень надо(( ...

Взаимодействие программы и ОС. - C++
Подскажите пожалуста (только сильно не пинайте плз :)) как реализовывается (или с помощью чего) взаимодействие программы и ОС, а потом...

Как создавать программы с графическим интерфейсом в среде Dev-cpp? - C++
Прошу, помогите, пожалуйста, сделать программу с графическим интерфейсом в Dev-cpp. Пока не могу даже разобраться с библиотеками. Уже...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
6a6kin
232 / 102 / 2
Регистрация: 18.04.2010
Сообщений: 295
15.11.2010, 21:52  [ТС]     Взаимодействие cpp-dll и delphi-программы #2
Есть хоть какие идеи?
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
17.11.2010, 03:54     Взаимодействие cpp-dll и delphi-программы #3
Может потому, что в Си приходится для каждой строки дополнительно выделять один байт под символ '\0'?
6a6kin
232 / 102 / 2
Регистрация: 18.04.2010
Сообщений: 295
17.11.2010, 23:51  [ТС]     Взаимодействие cpp-dll и delphi-программы #4
Размер совпадает, да и сами поля не до предела заполнены. Да и как тогда объяснить, что double или int тоже неправильно обрабатывает?

Не по теме:

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

nxnx
Формучанин
362 / 293 / 16
Регистрация: 02.11.2010
Сообщений: 1,234
18.11.2010, 00:57     Взаимодействие cpp-dll и delphi-программы #5
использовать 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;
Nameless One
18.11.2010, 03:02
  #6

Не по теме:

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

Не по теме:

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

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2010, 00:07     Взаимодействие cpp-dll и delphi-программы
Еще ссылки по теме:

Как поменять текст у кнопки во время работы программы, из .cpp файла? - Visual C++
В Билдере это очень просто: Form1->Button1->Caption="abc" А как в Visual Studio то же самое сделать? Если я пишу что-то типа...

Взаимодействие потока и основной программы - C++ Builder
- Здравствуйте многоуважаемые! Наверняка кто-то хорошо разбирается в вещах, в которых я сейчас заплутал. В моем приложении в основной...

Взаимодействие программы с сайтом в интрнете - C++
Здравствуйте уважаемые форумчане. Вопрос такой: Есть программа, есть сайт, сайт типа xxx.ucoz.ru У сайта есть почтовый ящик вида...

Взаимодействие программы и посторонних файлов - C++ Builder
Всем доброго времени суток. Вот тут возник такой вопрос, как подключить файл и взять из него содержимое, в данном случает есть такая...


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

Или воспользуйтесь поиском по форуму:
6a6kin
232 / 102 / 2
Регистрация: 18.04.2010
Сообщений: 295
24.11.2010, 00:07  [ТС]     Взаимодействие cpp-dll и delphi-программы #7
Я считаю, что все дело в packed. Скорее всего алгоритмы цпп и делфи различны. Однако моих скудных знаний не хватает, чтобы проверить это.
Yandex
Объявления
24.11.2010, 00:07     Взаимодействие cpp-dll и delphi-программы
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru