Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
231 / 101 / 6
Регистрация: 18.04.2010
Сообщений: 294
1

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

12.11.2010, 23:45. Просмотров 1482. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.11.2010, 23:45
Ответы с готовыми решениями:

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

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

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

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

6
231 / 101 / 6
Регистрация: 18.04.2010
Сообщений: 294
15.11.2010, 21:52  [ТС] 2
Есть хоть какие идеи?
0
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
17.11.2010, 03:54 3
Может потому, что в Си приходится для каждой строки дополнительно выделять один байт под символ '\0'?
0
231 / 101 / 6
Регистрация: 18.04.2010
Сообщений: 294
17.11.2010, 23:51  [ТС] 4
Размер совпадает, да и сами поля не до предела заполнены. Да и как тогда объяснить, что double или int тоже неправильно обрабатывает?

Не по теме:

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

0
Формучанин
362 / 293 / 41
Регистрация: 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;
0
Nameless One
18.11.2010, 03:02
  #6

Не по теме:

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

Не по теме:

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

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

0
231 / 101 / 6
Регистрация: 18.04.2010
Сообщений: 294
24.11.2010, 00:07  [ТС] 7
Я считаю, что все дело в packed. Скорее всего алгоритмы цпп и делфи различны. Однако моих скудных знаний не хватает, чтобы проверить это.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2010, 00:07

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

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

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