Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
2 / 5 / 1
Регистрация: 14.05.2013
Сообщений: 99

Импорт функции из dll: как корректно передать параметры в функцию?

15.05.2013, 10:41. Показов 2989. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть dll. Там функция, в c++ builder импортирую её:
C++
1
extern "C" __declspec(dllimport) int __stdcall StartSequence(char *lId, int ixId, unsigned int uintNo, int intCo, int intMo);
Далее внутри класса пытаюсь вызвать, передаю параметры, скажем, так:
C++
1
intRet = StartSequence("XXXX", 1, 1, 1, 1);
...но данные не попадают в обработчик StartSequence (в этом я могу убедиться, посколько StartSequence ведет подробный лог). Т.е. вместо моих
C++
1
"XXXX", 1, 1, 1, 1
приходят

C++
1
"", 0, 0, 0, 0
С чем, в принципе, это может быть связано??? Помогите разобраться, кто лучше меня разбирается в импорте функций из dll
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.05.2013, 10:41
Ответы с готовыми решениями:

Не могу разобраться как передать корректно передать массив из функции в функцию
//--------------------------------------------------------------------------- #pragma hdrstop ...

Как передать параметры в функцию
Пытался разобраться как передавать параметры в функцию. Если в C всё понятно func(1,2,3) То в bash так и не понял как это реализовано. ...

Как в функцию обработки сообщений передать параметры?
Как в функцию обработки сообщений типа void CMathematicsView::OnResultButton() передать параметры? Как и где написать прототип и...

13
55 / 55 / 8
Регистрация: 06.02.2013
Сообщений: 317
15.05.2013, 10:53
попробуйте первый параметр записать в например массив char с #0 в конце и передать туда этот массив ну либо адрес 0-го элемента массива
0
2 / 5 / 1
Регистрация: 14.05.2013
Сообщений: 99
15.05.2013, 11:02  [ТС]
Цитата Сообщение от LiquidSnake Посмотреть сообщение
попробуйте первый параметр записать в например массив char с #0 в конце и передать туда этот массив ну либо адрес 0-го элемента массива
На самом деле, так и делаю, ну не совсем:
C++
1
2
3
4
5
6
char* MyClass::ConvertString(String input)
{
    char *output = new char[input.Length()+1];
    wcstombs(output, input.c_str(), input.Length()+1);
    return output;
}
wcstombs сама добавляет \0 в конец строки

А Вызов:
C++
1
intRet = StartSequence(ConvertString("XXXX"), 1, 1, 1, 1);
0
55 / 55 / 8
Регистрация: 06.02.2013
Сообщений: 317
15.05.2013, 11:07
может закинете сюда библиотеку а я гляну - ну если конечно в ней нет ничего секретного
0
2 / 5 / 1
Регистрация: 14.05.2013
Сообщений: 99
15.05.2013, 11:09  [ТС]
Цитата Сообщение от LiquidSnake Посмотреть сообщение
может закинете сюда библиотеку а я гляну - ну если конечно в ней нет ничего секретного
Ну вообще-то подписано соглашение о неразглашении, поэтому не могу ((((

Тут еще дело в том, что вместе с библиотекой есть пример, консольное приложение с++ на Visual Studio 2010, и там все прекрасно работает...
У меня такое впечатление, что я как-то не правильно импортировал функцию
0
55 / 55 / 8
Регистрация: 06.02.2013
Сообщений: 317
15.05.2013, 11:29
я бы всё-таки попробовал какой-нибудь явный вариант, особенно без wcstombs
например
C++
1
2
AnsiString s = "123";
char *c = s.c_str();
и передаём c либо сразу s.c_str()

Добавлено через 2 минуты
если уж такое не прокатит - будем смотреть с описанием импорта
1
2 / 5 / 1
Регистрация: 14.05.2013
Сообщений: 99
15.05.2013, 11:49  [ТС]
Цитата Сообщение от LiquidSnake Посмотреть сообщение
я бы всё-таки попробовал какой-нибудь явный вариант, особенно без wcstombs
например
C++
1
2
AnsiString s = "123";
char *c = s.c_str();
и передаём c либо сразу s.c_str()

Добавлено через 2 минуты
если уж такое не прокатит - будем смотреть с описанием импорта
Попробовал - не помогло. Все те же самые ошибки...
0
55 / 55 / 8
Регистрация: 06.02.2013
Сообщений: 317
15.05.2013, 12:01
попробуйте __cdecl вместо __stdcall
0
2 / 5 / 1
Регистрация: 14.05.2013
Сообщений: 99
15.05.2013, 12:50  [ТС]
Цитата Сообщение от LiquidSnake Посмотреть сообщение
попробуйте __cdecl вместо __stdcall
При линковке возникает ошибка:
[ILINK32 Error] Error: Unresolved external '_StartSequence' referenced from XXXX.OBJ
0
55 / 55 / 8
Регистрация: 06.02.2013
Сообщений: 317
15.05.2013, 13:01
так даже хз , вот посмотрите если ещё уже не смотрели, может поможет
http://bcbjournal.org/articles... uilder.htm
1
Модератор
 Аватар для vxg
3409 / 2184 / 354
Регистрация: 13.01.2012
Сообщений: 8,462
15.05.2013, 14:11
Цитата Сообщение от doomkin Посмотреть сообщение
приходят
т.е. и вместо целых приходит хлам? может что-то вы затираете в самой функции гуляя по строке?
0
2 / 5 / 1
Регистрация: 14.05.2013
Сообщений: 99
15.05.2013, 16:13  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
т.е. и вместо целых приходит хлам? может что-то вы затираете в самой функции гуляя по строке?
На самом деле данные, попадают во внешний код (вроде теперь уже), но возникает исключение "Floating point division by zero". Такое впечатление, что они там внутри уже обнуляются, поэтому и возникает исключение. Притом, что аналогичный вызов в консольном приложении, откомпилированном в Visual Studio 2010 работает прекрасно...
0
Модератор
 Аватар для vxg
3409 / 2184 / 354
Регистрация: 13.01.2012
Сообщений: 8,462
15.05.2013, 16:24
Цитата Сообщение от doomkin Посмотреть сообщение
На самом деле данные
что то я на самом деле перестал понимать как оно у вас работает. откуда вы узнаете что приходит не то что послано? для примера соберите консоль использующую вашу DLL. все ок? значит проблемы у кривого клиента. он как-то умудряется раскурочить данные да еще и логи жудкие пишет
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.05.2013, 00:52
Библиотека содержит классы ?
Для подключения нужен хедер библиотеки, он есть ?

Добавлено через 2 минуты
Цитата Сообщение от LiquidSnake Посмотреть сообщение
так даже хз , вот посмотрите если ещё уже не смотрели, может поможет
http://bcbjournal.org/articles... uilder.htm
DLL в C++Builder и Microsoft Visual C++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.05.2013, 00:52
Помогаю со студенческими работами здесь

как передать параметры в функцию, которая приклеена к событию?
element.click = func(parameter1,parameter2)

Как передать параметры функции?
Как правильно прописать, чтобы передались параметры функции? Option Compare Database Option Explicit Private Sub...

Как передать Inline-функции параметры?
Суть проблемы такова. Есть m-файл следующего содержания: function c = MyFunc(SS,a,b) F = inline(SS); c = F(a,b); На вход...

Передать функцию в функцию и другие параметры. Расшифровать конструкцию
Здравствуйте. Примером может служить jq, в которой мы прописываем функции (чаще всего анонимные), которые выполняются при каких либо jq...

Передать параметры в функцию.
Всем привет! Не получается передать параметры из Delphi в библиотеку написанную на C++. Код программы: #define...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru