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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
6a6kin
 Аватар для 6a6kin
232 / 102 / 2
Регистрация: 18.04.2010
Сообщений: 295
12.11.2010, 23:45     Взаимодействие cpp-dll и delphi-программы #1
Есть программа, написанная на делфи, а также две длл: одна на с++, другая на делфи.
Программа передает параметр - указатель 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-программы
Посмотрите здесь:

C++ Взаимодействие программы и ОС.
C++ Builder Перенести код из VC++ в CPP Builder (код использует DLL)
C++ При разбиении программы на *.cpp, *.h - файлы программа не компилируется.
Как поменять текст у кнопки во время работы программы, из .cpp файла? Visual C++
C++ Dll на Cpp 6.0 не работает в VB
Компиляция программы из файла cpp через командную строку C++
C++ Взаимодействие программы и ОС
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
6a6kin
 Аватар для 6a6kin
232 / 102 / 2
Регистрация: 18.04.2010
Сообщений: 295
15.11.2010, 21:52  [ТС]     Взаимодействие cpp-dll и delphi-программы #2
Есть хоть какие идеи?
Nameless One
Эксперт С++
 Аватар для Nameless One
5759 / 3408 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
17.11.2010, 03:54     Взаимодействие cpp-dll и delphi-программы #3
Может потому, что в Си приходится для каждой строки дополнительно выделять один байт под символ '\0'?
6a6kin
 Аватар для 6a6kin
232 / 102 / 2
Регистрация: 18.04.2010
Сообщений: 295
17.11.2010, 23:51  [ТС]     Взаимодействие cpp-dll и delphi-программы #4
Размер совпадает, да и сами поля не до предела заполнены. Да и как тогда объяснить, что double или int тоже неправильно обрабатывает?

Не по теме:

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

nxnx
Формучанин
361 / 292 / 16
Регистрация: 02.11.2010
Сообщений: 1,227
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-программы
Еще ссылки по теме:

С помощью командной строки >namberstr f1.cpp Определить число строк в файле с именем f1.cpp C++
Взаимодействие ПК с внешним устройством через DLL и ошибка Lvalue required C++
C++ Компиляция .cpp-файлов из программы
Разделение программы на .h .cpp .cpp C++
C++ Как создавать программы с графическим интерфейсом в среде Dev-cpp?

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

Или воспользуйтесь поиском по форуму:
6a6kin
 Аватар для 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-программы
Ответ Создать тему
Опции темы

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