47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
|
|
1 | |
Импорт класса из C++ в C#16.05.2011, 18:18. Показов 9288. Ответов 28
Метки нет (Все метки)
Есть класс (шаблонный), написанный на С++. Необходимо его импортировать в C#. Я пробовал собирать из C++ класса dll, написав class __declspec( dllexport ) %ClassName%.
При добавлении библиотеки в C# проект VS 2010 выдаёт ошибку: A reference ... could not be added. Please make sure that the file is accessible, and that it is a valid asse,bly or COM component. Как исправить данную ошибку? P.S. Если возможно другие варианты импорта, то они тоже могут быть рассмотрены, как решение
0
|
16.05.2011, 18:18 | |
Ответы с готовыми решениями:
28
Импорт класса из dll Импорт класса ошибка Импорт С# класса из DLL в С++/CLI Импорт класса из другого проекта |
86 / 85 / 13
Регистрация: 21.10.2010
Сообщений: 349
|
|
16.05.2011, 21:04 | 2 |
Создай сом библиотеку зарегь ее на компе и вызывай из C#
0
|
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
|
|
16.05.2011, 23:35 [ТС] | 3 |
Vangok, можете объяснить, как это сделать или кинуть ссылку на литературу
0
|
1319 / 992 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
|
|
17.05.2011, 12:17 | 5 |
Vangok, sigmov, мечтатели))))
M__A__K, выложи сюда сам ++ класс (не больше 20 строк, плиз)
0
|
155 / 155 / 30
Регистрация: 19.10.2009
Сообщений: 319
|
|
17.05.2011, 14:22 | 6 |
По мне самый простой способ, чтоб на C++ не мучится с CLR, скомпилировать обычную DLL с def-файлом для Factory, а потом использовать DllImport. Здесь на примере WinAPI подробно описано, как им пользоваться, и приведена таблица соотвествия типов данных C++ и C#.
1
|
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
|
||||||
17.05.2011, 14:32 [ТС] | 7 | |||||
sigmov, всё равно выдаёт ту же ошибку
вот код:
Ilya81, по подробней, пожалуйста. как ? с DllImport я работал, когда winapi импортировал
0
|
17.05.2011, 14:52 | 8 | |||||
Потому что это template классы.
Кстати template классы экспортировать в dll невозможно впринципе.
Кстати очень интересно, а что же делает чтлен Element<T>^ next_element в бинарном узле )))))
0
|
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
|
|
17.05.2011, 15:04 [ТС] | 9 |
у меня получается двойная организация: бинарное дерево и список. там ещё Element<T>* previous_element есть
что, вообще никак?
0
|
155 / 155 / 30
Регистрация: 19.10.2009
Сообщений: 319
|
|
17.05.2011, 15:05 | 10 |
Я думал возвращать класс как результат вызова функции, но если я тут вижу template, боюсь, это не получится, я сильно сомневаюсь, что template в принципе можно использовать в .Net. Вероятно, этот С++ нужно как-то переделывать...
0
|
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
|
|
17.05.2011, 15:16 [ТС] | 11 |
но в .NET есть же такие структуры данных как List<>, Array<> и др. из System.Collections.Generic. они то как-то реализованы...
Добавлено через 5 минут sigmov, что вы хотели сказать приведенным кодом? это мне необходимо заменить мой код на ваш, чтобы получилось? и что за операция ^?
0
|
17.05.2011, 15:21 | 12 |
А понятно. Скрещиваете кроликов с удавами....
Абсолютно. DLL - это бинарный модуль. А Template аппроксимацию в бинанрный модуль никак не засунешь. Все Template строго идентифицируются на этапе компиляции. Generic - несколько иная вещь. За счет двуфазности компиляции сборок в NET, Generic строко идентифицируется лишь на этапе JIT компиляции. Что позволяет "упихать" Generic в сборку(которую некоторые именуют dll, хотя это не совсем так). Однако сие накладывает ограничения на использование самих вариантных типов - среда должна что они умеют еще на первой фазе компиляции. Добавлено через 2 минуты Через Generic, не Template 1) Как это выглядит на MC++ 2) Да 3) Обозначение управляемой ссылки(указателя) P.S. Хотя на самом деле, сильно не понимаю, зачем так извращаться с С++, ечли все это есть в исходниках на C#
0
|
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
|
|
17.05.2011, 15:39 [ТС] | 13 |
я сравниваю быстродействие различных структур данных, предназначенных для хранения множеств. в качестве тестируемых структур использую парочку из System.Collections.Generic, обыкновенный массив и бинарное дерево (точнее кролико-удавного гибрида). Реализация бинарного дерева делается собственноручно т.к. доступ к внутренней структуре должен дать большее быстродействие. а именно на с++ я данную структуру данных реализовываю, т.к. там сплошная работа с указателями, а данный вид работы удобней выполнять именно на с++
Добавлено через 1 минуту использование именно dll непринципиально. моя цель - импортировать данный класс в c# код. Добавлено через 6 минут sigmov, по коду: 1) конструкторы за комментированы. как без конструкторов то? 2) virtual ... = 0; это вы так определяете пустую функцию абстрактного класса, чьё объявление должно быть в дочернем классе? просто у меня BinaryTree не абстрактный класс, я просто не стал выкладывать объявление. если нужно, могу выложить
0
|
17.05.2011, 15:56 | 14 |
1. Вас ждет "сюрприз" - родные коллекции(System.Collections.Generic) все равно будут быстрее.
2. В С# любой класс - это тот же самый указатель(ссылка), только более продвинутый - за освобождением памяти следить не надо. 2. Да мне то зачем? - просто убери virtual и подставь тела своих функций
0
|
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
|
|
17.05.2011, 16:03 [ТС] | 15 |
тут же ещё зависит от самой структуры данных.
скорее всего так и сделаю, т.к. проблемы с импортом оказались больше, чем ожидаемые трудности с работой с указателями в шарпе. так что ждите вопросов про указатели
0
|
17.05.2011, 16:16 | 16 |
Я даже сам задам Вам вопрос: какие же проблемы при работе с ссылками(указателями) в Шарпе?
А то может я что-то упустил в своей жизни..... )))) Добавлено через 5 минут Мое Бинарное дерево
0
|
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
|
|
17.05.2011, 16:48 [ТС] | 17 |
конкретно сказать не могу, но помнится там были какие-то замуты при работе с указателями на структуры
на счёт вашего дерева: - нет удаления элемента - нет индексации, т.е. при поиске нельзя вывести индекс ну и нет нужных мне операции над множествами а именно пересечение, объединение и вычитание
0
|
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
|
||||||
20.05.2011, 22:55 [ТС] | 18 | |||||
sigmov,
как с этим бороться?
0
|
1319 / 992 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
|
||||||
20.05.2011, 23:18 | 19 | |||||
вспомнился анекдот про "но у вас ничего не выйдет"...
0
|
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
|
|
20.05.2011, 23:24 [ТС] | 20 |
Mikant, дело в том, что мне необходимо, чтобы left_element, right_element, next_element, previous_element были именно указателями. а в предложенном вами варианте данные элементы являются обыкновенными переменными
0
|
20.05.2011, 23:24 | |
20.05.2011, 23:24 | |
Помогаю со студенческими работами здесь
20
Импорт класса из другого файла Как сделать импорт класса? Импорт элементов класса в программу Импорт статических методов класса Math. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |