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

C++

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

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

12.11.2010, 23:45. Просмотров 1135. Ответов 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-программы (C++):

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

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями? - C++
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете искал 64-битные версии ogg.dll, vorbis.dll...

Перенести код из VC++ в CPP Builder (код использует DLL) - C++ Builder
Такая проблема. Есть DLL + пример её использования на Visual C++, пытаюсь этот пример перенести в Builder. Проблемы возникают в самом...

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

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

Delphi DLL в C++ Builder - C++ Builder
Привет всем! Появилась необходимость подключения DLL, написанного на Delphi, к программе на C++. Итак, вопрос заключается в следующем:...

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

Не по теме:

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

nxnx
Формучанин
362 / 293 / 16
Регистрация: 02.11.2010
Сообщений: 1,234
18.11.2010, 00:57 #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 тоже неправильно обрабатывает?

Не по теме:

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

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

6a6kin
232 / 102 / 2
Регистрация: 18.04.2010
Сообщений: 295
24.11.2010, 00:07  [ТС] #7
Я считаю, что все дело в packed. Скорее всего алгоритмы цпп и делфи различны. Однако моих скудных знаний не хватает, чтобы проверить это.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2010, 00:07
Привет! Вот еще темы с ответами:

Не получается вызвать функции из dll, написанной на Delphi - C++ Builder
Использую библиотеку программы Invisible Secrets. А именно jpgcarrier.dll . Она шифрует\дешифрует файлы совмещая их при этом с jpg...

Можно ли в ходе выполнения программы загружать изображения в dll? - C++ Builder
можно ли это реализовать? и как?

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.11.2010, 00:07
Ответ Создать тему
Опции темы

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