Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
skilllab
198 / 172 / 48
Регистрация: 03.02.2011
Сообщений: 1,749
Записей в блоге: 1
Завершенные тесты: 1
#1

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

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

Добрый день.
есть функция в 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]
из функции библиотеки?

Спасибо.
http://www.cyberforum.ru/cpp-beginners/thread1707067.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2013, 10:58
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Возвратить object в экспортируемой функции dll (C++):

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

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

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

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

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

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

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

Добавлено через 5 минут
Может быть как-то через
C++
1
std::vector
?
0
OhMyGodSoLong
~ Эврика! ~
1245 / 994 / 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2013, 17:00
Привет! Вот еще темы с решениями:

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

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

Как возвратить созданый динамический двухмерный массив из функции в main?
Надо из функции mtx возвртить матрицу в главную функцию. Матрица создаеться и...

Что можно возвратить из функции если нужный объект не создан
Добрый день! Есть функции, которые возвращают указатели на двумерные...


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

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

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