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

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

Восстановить пароль Регистрация
 
skilllab
73 / 73 / 18
Регистрация: 03.02.2011
Сообщений: 1,085
Завершенные тесты: 1
24.03.2013, 10:58     Возвратить object в экспортируемой функции dll #1
Добрый день.
есть функция в 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]
из функции библиотеки?

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

C++ DLL и Функции
C++ Экспорт функции из dll
C++ Вызов функции с DLL
C++ Как возвратить созданый динамический двухмерный массив из функции в main?
как принять и возвратить массив в другой функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
24.03.2013, 12:35     Возвратить object в экспортируемой функции dll #2
Ну вы попали... Я в C# и всё такое не шарю, но вот тут говорится, что у MSVC есть магический ключик /clr, который без всяких extern "C" заставляет C++-компилятор генерировать managed-объектники, которые C#-код может переваривать без проблем.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
24.03.2013, 12:53     Возвратить object в экспортируемой функции dll #3
Если импортировать через PInvoke, то с не POD-классом у вас ничего не получится(особенно с указателем на абстрактный класс). Можно перегнать класс в структуру(но без всякой виртуальности), либо компилировать как managed код(но это достаточно геморно).
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.03.2013, 13:04     Возвратить object в экспортируемой функции dll #4
Цитата Сообщение от skilllab Посмотреть сообщение
//чем заменить int
IMaterial*
skilllab
73 / 73 / 18
Регистрация: 03.02.2011
Сообщений: 1,085
Завершенные тесты: 1
24.03.2013, 15:53  [ТС]     Возвратить object в экспортируемой функции dll #5
Если использовать сторонние интеропы (те же функции, что и в сторонних dll) в NET они почти всегда возвращают либо object, либо System.__ComObject (либо массивы этих обжектов - [])
Вот и подумал так же сделать: реализовать некоторые функции в C++, в шарпе их вызывать и получать возвраты.

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

Добавлено через 5 минут
Может быть как-то через
C++
1
std::vector
?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
24.03.2013, 17:00     Возвратить object в экспортируемой функции dll #6
Цитата Сообщение от skilllab Посмотреть сообщение
Вот и подумал так же сделать: реализовать некоторые функции в C++, в шарпе их вызывать и получать возвраты.
Ммм. Ну можете попробовать. Функции создают где-то в куче объекты Си++, возвращают C#-коду какие-то числа-хендлы, по которым C#-код сможет дёргать нужные объекты. Внутри и Си++-кода какой-то std::map<Handle, Object*>. И сверху C#-обёртку с аналогичными методами и ручной передачей хендла аналогично this. Но как-то это попахивает Хотя...
Yandex
Объявления
24.03.2013, 17:00     Возвратить object в экспортируемой функции dll
Ответ Создать тему
Опции темы

Текущее время: 09:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru