@Kvert007

Вернуть 3 переменных из функции С++

Здравствуйте! Пишу ДЛЛ на С++ которая включает в себя несколько функций. Далее эта библиотека будет цеплятся к проекту на Visual Basic. Сейчас функция возвращает строку типа BSTR, но поступили новые требования, теперь нужно чтоб функция возвращала строку + код отработки(переменная типа инт)+код ошибки если не отработала. Как сделать чтоб все три переменные вернулись???
  • Вопрос задан
  • 4020 просмотров
Пригласить эксперта
Ответы на вопрос 12
@v_prom
упакуй их в структуру или объект.
Ответ написан
Комментировать
MikhailD
@MikhailD
Developer
Есть несколько вариантов.
Про один вам уже сказали - сделать структуру с нужными полями и возвращать ее.
Второй - передавать в функцию указатели на указатели и возвращать значения через аргументы.
Третий - сделать несколько дополнительных функций, например GetLastErrorCode(), которые будут возвращать коды ошибок или еще что-то.

Можно как-то комбинировать эти способы, конкретная реализация зависит от задачи.
Ответ написан
@Kvert007 Автор вопроса
А в VB можно передать структуру?Если да то как?
Ответ написан
Комментировать
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Ответ написан
Комментировать
AxisPod
@AxisPod
Без понятия как работает VB, никогда не использовал, но как вариант возвращать информацию о объекте, затем с этим объектом можно работать реализовать несколько функций, которые по инфе о объекте будут возвращать нужное значение, ну и так же его удалять когда более не требуется.
Ответ написан
Комментировать
@Kvert007 Автор вопроса
Библиотека пишется в VS 2005 для того чтоб можно было юзать в хп и вин2000. Pair это тоже структура....
интересует тогда как объявить функцию???
сейчас вот так: extern "C" __declspec(dllexport) BSTR CCONV getDomainUserSAMAccountName

Как ее объявить в VB?? на данный момент объявлена так:
Private Declare Function sAMAccountName Lib "FinalLib.dll" Alias "_getDomainUserSAMAccountName@0" () As String
Ответ написан
Комментировать
@Kvert007 Автор вопроса
Чтобы засунуть это все в объект надо писать класс, а есть только функции.
1) Возвращает значение samacauntname из ад
2)Возвращает значение UPNиз АД
3) Список групп пользователя.
Ответ написан
Комментировать
@Kvert007 Автор вопроса
Help!!!
Ответ написан
Комментировать
icelaba
@icelaba
Знаю и умею всё
смотри boost а именно boost::tuple
return boost::make_tuple(a,b,c)
Ответ написан
@Kvert007 Автор вопроса
Может я туплю конечно, но если в вб сделать так...
Private Declare Function test Lib "FinalLib.dll" Alias "_test@4" (ByRef i As Integer)
то передается ссылка на переменную i как в С++ принять и записать новое значение в эту обл. памяти
Ответ написан
Комментировать
@Kvert007 Автор вопроса
UP!!!
Ответ написан
Комментировать
zmeykas
@zmeykas
Developer at SoftCommerce Ukraine
Если уж совсем костыльно - возвращай строку в которой три твои переменные разделены каким-либо символом (набором символов), а в бейсике разбери обратно.
Например: [код обработки]\t[код ошибки]\t[строка]

Но лучше, конечно, передать в функцию указатели на переменные в которых сохранится результат.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы