0 / 0 / 0
Регистрация: 18.06.2014
Сообщений: 14
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Создать управляемую библиотеку, чтобы использовать ее в будущем в других .NET проектах18.07.2014, 17:49. Показов 1806. Ответов 15
Метки нет (Все метки)
Здравствуйте. Имеется заголовочный h.-файл с C++ кодом, реализующий решение систем нелинейных уравнений
В нем есть объявление функций и их реализация: Объявление:
Возник вопрос как правильно сделать аналогично объявление и реализацию в managed dll конструкции выше. Не понятно, как обращаться с generic типом
0
|
18.07.2014, 17:49 | |
Ответы с готовыми решениями:
15
Как создать UserControl и использовать его в качестве шаблона в других проектах Как создать dll-библиотеку, чтобы другие могли ее использовать? Как правильно использовать свой обновляемый проект в других своих проектах Как использовать библиотеку JSON .NET |
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
|
|
19.07.2014, 03:12 | 2 |
1
|
0 / 0 / 0
Регистрация: 18.06.2014
Сообщений: 14
|
|
19.07.2014, 04:08 [ТС] | 3 |
Спасибо, но это не вариант. Уже пробовал это делать, и на Vb.net и на C#. Не вышло.
А можно как-нибудь заменить шаблон функции template на указатель? Как-то через typedef реализовать?
0
|
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
|
||||||||||||||||
19.07.2014, 05:02 | 5 | |||||||||||||||
Что бы избавиться от template, объявите указатель на функцию
т.е. это вариант использования нативной длл Добавлено через 45 минут собираете обычную длл. все функции и указатель на функцию объявляете в хэдере, реализацию функций в СРР файле. ref class уберите совсем Так вам именно управляемую сборку? Завтра захотите в других проектах, без NET и опять переписывать?
1
|
0 / 0 / 0
Регистрация: 18.06.2014
Сообщений: 14
|
|
19.07.2014, 08:38 [ТС] | 6 |
Спасибо за ответ, да именно управляемую библиотеку. Для других проектов, могу пользоваться библиотекой в заголовочнике из которого собственно собираю managed dll.
Добавлено через 2 часа 21 минуту Только, что прочел что шаблоны и указатели C++/CLI при подключении к проектам .NET съедаются метаданные из-за несовместимости этих типов. Придется делать именно как посоветовали вы нативную длл-ку и пушить в нее данные из C#. опыта такого у меня нет совсем, поэтому если возникнут вопросы я еще немножечко у вас спрошу, можно?
0
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
21.07.2014, 15:32 | 7 |
Вообще, C# поддерживает шаблоны.
http://msdn.microsoft.com/en-u... ad0zb.aspx
0
|
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
|
|
21.07.2014, 19:45 | 8 |
CheshireCat, там ни к чему генерики. Если на С# переписывать, то там один тип делегата на всю
библиотеку.
0
|
0 / 0 / 0
Регистрация: 18.06.2014
Сообщений: 14
|
|
31.07.2014, 09:00 [ТС] | 9 |
Доброго времени суток, я собрал unmanaged dll по вашим рекомендациям и проверил ее работоспособность, подключив к консольному приложению на чистом C++.
А вот, вызывать функции из dll из проекта на VB.Net все еще не получается. Кажется, функция считывается и пытается выполнятся но возникает ошибка как-то связанная с границами массивов, наверное есть какое-то несоответствие массивов си и бейсика. Пожалуйста, будьте добры взгляните на проекты: Dynamic Lybrary (2 решения: MathFuncsDll - дллка, MyExecRefsDll - вызов функции дллки на С++) и testdll in vb (вызов функции дллки на Vb.net)
0
|
Модератор
3400 / 2171 / 353
Регистрация: 13.01.2012
Сообщений: 8,408
|
|
31.07.2014, 10:56 | 10 |
функции неверно принимают массивы. вот тут все написано (MSDN HOWTO: Pass Arrays Between Visual Basic and C Q207931) http://support.microsoft.com/kb/207931
1
|
0 / 0 / 0
Регистрация: 18.06.2014
Сообщений: 14
|
|
31.07.2014, 13:59 [ТС] | 11 |
Спасибо, похоже Вы правы, насколько я понял из статьи массивы в .NET другого типа (safearray) нежели в С++, и для организации взаимодействия нужно, как-то научить воспринимать этот тип safearray неуправляемым кодом, либо конвертировать в управляемом коде тип safearray в Сишный указатель.
Для первого случая, кажется годится 1 или 2 метод (не уверен какой выгодней) в указанной Вами статье, для второго случая наверное можно использовать средства класса Marshal(по-моему это гораздо проще, но что-то не нашел хорошего понятного для новичка примера). Буду пробовать оба подхода, ну и надеюсь на ваши советы и предложения.
0
|
Модератор
3400 / 2171 / 353
Регистрация: 13.01.2012
Сообщений: 8,408
|
|
31.07.2014, 15:25 | 12 |
1 метод, как я понял, это и есть передача указателя в C-стиле
2 метод, это когда мы принимаем настоящий safearray наверное, 1 метод лучше ибо зачем нам мучиться?
1
|
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
|
||||||
31.07.2014, 15:41 | 13 | |||||
Прошелся отладчиком , все массивы возвращаются из длл длинной равной единице.
Жестко размер укажите в параметрах, должно помочь.
1
|
0 / 0 / 0
Регистрация: 18.06.2014
Сообщений: 14
|
|
31.07.2014, 19:05 [ТС] | 14 |
Ошибка исчезла, но почему-то в массиве с решением xSys1(0..3) одни нули.
Добавлено через 13 минут Хотя, вру ошибка не исчезла : A first chance exception of type 'System.IndexOutOfRangeException' occurred in testdll in vb.exe A first chance exception of type 'System.AccessViolationException' occurred in testdll in vb.exe
0
|
Модератор
3400 / 2171 / 353
Регистрация: 13.01.2012
Сообщений: 8,408
|
|
31.07.2014, 20:56 | 15 |
а где выкидывает?
0
|
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
|
||||||
01.08.2014, 12:59 | 16 | |||||
Сообщение было отмечено anakinskyoker как решение
РешениеНе по теме: утром на свежую голову вспомнил про In, Out
1
|
01.08.2014, 12:59 | |
01.08.2014, 12:59 | |
Помогаю со студенческими работами здесь
16
Как подключить и использовать библиотеку extjs в asp.net mvc 4 Какую библиотеку использовать, чтобы найти значение уравнения Создать новый список из двух других, чтобы он содержал равные элементы из двух других списков Создать библиотеку javascript и использовать её в коде Какую библиотеку использовать, чтобы прослушивать/изменять громкость нескольких треков одновременно Как создать библиотеку для .NET? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |