![]() |
|
|
![]()
|
|
| Kosoglaz |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 1.2.2008 Репутация: нет Всего: нет |
Здравствуйте, программисты!
Помогите, пожалйста, решить проблему передачи данных между приложением Delphi 2007 и DLL MS Visual C++ 6 Идея такая, что Delphi App делает запрос DLLке, а та возвращает данные. Вот код C++
Вариант с параметрами работает, но строковые значения криво возвращаются. Дежучник в Си показывает после вызова из Дельфи с nIndex = 0, что name = 'January', а уже в Дельфи после вызова name = ''anuary'#0#0#0#0#0#0#0#0#0'е'#8'яяі'#2#0#0#1#0#0#0#$E#0#0#0' Ѓ¦'#0'шф'#$12#0'fгУwе'#8'яяf'#$B#$1C#0#$E#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0'Lц'#$12#0'|'#$1E'D' Вот код Delphi
Такие вот дела. Не пойму, в чём проблемы. А главное, не знаю уже отлаженного решения передачи данных, в т.ч. строковых из СиПП ДЛЛ в Дельфи приложение. Подскажите решение, пожалуйста. А ещё лучше, если объясните суть проблемы, чтобы я мог сам понять как это всё делается и почему не делается. Спасибо! |
||||
|
|||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 2 Всего: 23 |
В Delphi, кажется, есть класс PChar для работы с такими функциями.
|
|||
|
||||
| dizzy1984 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: 10 Всего: 25 |
В си++ строки хранятся как набор байтов с завершающим символом '\0'. В дельфи строка представлена иначе. Если бы строка была представлена так : первый байт - длина строки, потом сама строка, то приведенный дамп бы объяснился просто - съеден первый символ, отображены все символы за завершающим нулем (посчитай их там случайно не 74 - 'J'?).
Это сообщение отредактировал(а) dizzy1984 - 4.2.2008, 06:59 |
|||
|
||||
| Kosoglaz |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 1.2.2008 Репутация: нет Всего: нет |
Спасибо за подсказку! Действительно, представление ShortString в Delphi такое: 0ой символ - длина строки, остальные - содержимое без нулевого на конце. Просто поменял в Си коде: mx = strlen(Names[nIndex]); for(i=0; i < btStrLen; i++) { *name= Names[nIndex][i]; name++; } name[i] = '\0'; на btStrLen = (char)strlen(Names[nIndex]); *name = btStrLen; for(i=0; i < btStrLen; i++) { *(++name) = Names[nIndex][i]; } И всё работает! |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |