Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
skilllab
116 / 113 / 22
Регистрация: 03.02.2011
Сообщений: 1,470
Завершенные тесты: 1
#1

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

24.03.2013, 10:58. Просмотров 348. Ответов 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]
из функции библиотеки?

Спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2013, 10:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возвратить object в экспортируемой функции dll (C++):

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

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

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

Возвратить из функции два значения - C++
#include <iostream> #include <cmath> using namespace std; double F(double x) { double f = 0; f = pow(x, 1/2)+ pow(x,...

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
24.03.2013, 12:35 #2
Ну вы попали... Я в C# и всё такое не шарю, но вот тут говорится, что у MSVC есть магический ключик /clr, который без всяких extern "C" заставляет C++-компилятор генерировать managed-объектники, которые C#-код может переваривать без проблем.
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
24.03.2013, 12:53 #3
Если импортировать через PInvoke, то с не POD-классом у вас ничего не получится(особенно с указателем на абстрактный класс). Можно перегнать класс в структуру(но без всякой виртуальности), либо компилировать как managed код(но это достаточно геморно).
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.03.2013, 13:04 #4
Цитата Сообщение от skilllab Посмотреть сообщение
//чем заменить int
IMaterial*
0
skilllab
116 / 113 / 22
Регистрация: 03.02.2011
Сообщений: 1,470
Завершенные тесты: 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
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
24.03.2013, 17:00 #6
Цитата Сообщение от skilllab Посмотреть сообщение
Вот и подумал так же сделать: реализовать некоторые функции в C++, в шарпе их вызывать и получать возвраты.
Ммм. Ну можете попробовать. Функции создают где-то в куче объекты Си++, возвращают C#-коду какие-то числа-хендлы, по которым C#-код сможет дёргать нужные объекты. Внутри и Си++-кода какой-то std::map<Handle, Object*>. И сверху C#-обёртку с аналогичными методами и ручной передачей хендла аналогично this. Но как-то это попахивает Хотя...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2013, 17:00
Привет! Вот еще темы с ответами:

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

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

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

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями? - C++
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете искал 64-битные версии ogg.dll, vorbis.dll...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.03.2013, 17:00
Ответ Создать тему
Опции темы

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