Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,993
Записей в блоге: 1
1

Возвратить object в экспортируемой функции dll

24.03.2013, 10:58. Показов 616. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.
есть функция в dll, которая использует сторонние tlb (они подключены в h):

C++
1
2
3
4
5
extern "C" _declspec(dllexport) int Material() //чем заменить int
{
                IMaterial** Materials = new IMaterial*(); //Абстрактный класс, верхний уровень
        IMaterial* Material = Materials[0];//Получение
}
есть код на NET, в котором будет использоваться этот возврат в виде
C#
1
object[] = Material()
Как возвратить именно
C++
1
Materials[0]
из функции библиотеки?

Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.03.2013, 10:58
Ответы с готовыми решениями:

Возвратить массив из функции
Вопрос стар как мир it, но неопытному человеку, пока его не ткнут носом почти невозможно самому...

Возвратить массив из функции
Вот код на FPC Lazarus, нада его точь в точь перевести в си++, я специально придумал этот пример...

Возвратить массив из функции
как мне из функции input items возвратить мой массив?вот код protected: int ArrayLenght; int...

Не удается возвратить значение функции
Функция arr() должна посчитать количевство шагов цикла while и вернуть их в main, но при запуске...

5
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
24.03.2013, 12:35 2
Ну вы попали... Я в C# и всё такое не шарю, но вот тут говорится, что у MSVC есть магический ключик /clr, который без всяких extern "C" заставляет C++-компилятор генерировать managed-объектники, которые C#-код может переваривать без проблем.
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
24.03.2013, 12:53 3
Если импортировать через PInvoke, то с не POD-классом у вас ничего не получится(особенно с указателем на абстрактный класс). Можно перегнать класс в структуру(но без всякой виртуальности), либо компилировать как managed код(но это достаточно геморно).
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
24.03.2013, 13:04 4
Цитата Сообщение от skilllab Посмотреть сообщение
//чем заменить int
IMaterial*
0
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,993
Записей в блоге: 1
24.03.2013, 15:53  [ТС] 5
Если использовать сторонние интеропы (те же функции, что и в сторонних dll) в NET они почти всегда возвращают либо object, либо System.__ComObject (либо массивы этих обжектов - [])
Вот и подумал так же сделать: реализовать некоторые функции в C++, в шарпе их вызывать и получать возвраты.

Добавлено через 4 минуты
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
есть магический ключик /clr
нене..только native (unmanaged), только хардкор

Добавлено через 5 минут
Может быть как-то через
C++
1
std::vector
?
0
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
24.03.2013, 17:00 6
Цитата Сообщение от skilllab Посмотреть сообщение
Вот и подумал так же сделать: реализовать некоторые функции в C++, в шарпе их вызывать и получать возвраты.
Ммм. Ну можете попробовать. Функции создают где-то в куче объекты Си++, возвращают C#-коду какие-то числа-хендлы, по которым C#-код сможет дёргать нужные объекты. Внутри и Си++-кода какой-то std::map<Handle, Object*>. И сверху C#-обёртку с аналогичными методами и ручной передачей хендла аналогично this. Но как-то это попахивает Хотя...
0
24.03.2013, 17:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2013, 17:00
Помогаю со студенческими работами здесь

Возвратить из функции два значения
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; double F(double x) { double f =...

Как возвратить несколько значений в функции?
Функция, реализующая обобщенный алгоритм Евклида. Нужно вернуть 3 значения: gcd, x и y. То есть...

Как функции возвратить ссылку на объект?
//Есть некая функция что писать перед функцией??? Инт написал. int func(){ // Создаем какой-то...

Как принять и возвратить массив в другой функции?
пример: прототип функции ??? int main() { создаём функцию которая задаёт массив b ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru