29 / 29 / 5
Регистрация: 21.04.2012
Сообщений: 282
|
||||||||||||||||
1 | ||||||||||||||||
Использование функций DLL, написанной на C++05.07.2014, 21:42. Показов 4294. Ответов 17
Метки нет (Все метки)
В проекте C# нужно использовать функции, написанные на с++. Создал DLL-ку, все отлично цепляется. Вопрос в том, что в с++ проекте есть своя структура
0
|
05.07.2014, 21:42 | |
Ответы с готовыми решениями:
17
Использование DLL, написанной на delphi Вызов функций из DLL, написанной на CBuilder. Использование функций DLL, подключенных к приложению Использование DLL, написанной на C++, в C# (указатели) |
Ушел с форума
|
|
05.07.2014, 22:02 | 2 |
К сожалению, надежного способа сделать это не существует.
У C++ отсутствует стандартный двоичный интерфейс (ABI), поэтому его сущности нельзя выносить за пределы модулей. Единственный более-менее приемлемый вариант - обернуть все в C-шные функции, указатели и структуры, оперируя типами с известными размерами и выравниванием, общими для обоих языков - C++ и C#, как это сделано в Win32 API / PInvoke.
2
|
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
|
||||||
05.07.2014, 22:09 | 3 | |||||
C Sharp ничего не знает о таких типах как std::string std::vector,
как не знает о передаче по ссылке Значит перепишите структуру, вместо вектора и строк используйте массивы. Вместо передачи по ссылке передавайте структуру по указателю.
1
|
29 / 29 / 5
Регистрация: 21.04.2012
Сообщений: 282
|
|
05.07.2014, 22:51 [ТС] | 4 |
MrCold, спасибо.
Добавлено через 3 минуты MrCold, то есть вообще уйти от использования вектора? даже если нигде явно это не будет указываться, все равно он не поймет? Я к тому, что если переписать функцию, уйдя просто от вызова по ссылке.
0
|
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
|
|
05.07.2014, 22:57 | 5 |
Вам передаваемую структуру ещё в коде C# описать придется, поэтому только массивы.
А в параметрах функции используйте С-стиль : Структуры в стиле С, указатели, массивы
0
|
29 / 29 / 5
Регистрация: 21.04.2012
Сообщений: 282
|
|||||||||||
05.07.2014, 22:59 [ТС] | 6 | ||||||||||
MrCold, Я про другое.
Если на с++ будет функция
0
|
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
|
|
05.07.2014, 23:01 | 7 |
Да, тут конечно. только про параметры говорил.
Внутри длл пишите на С++ , без проблемь
0
|
29 / 29 / 5
Регистрация: 21.04.2012
Сообщений: 282
|
||||||||||||||||
05.07.2014, 23:06 [ТС] | 8 | |||||||||||||||
MrCold, тогда вопрос следующий)
Код в dll
в c# подцепляю ее:
Попытка чтения или записи в защищенную память...
0
|
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
|
||||||
05.07.2014, 23:10 | 9 | |||||
Добавлено через 1 минуту и вопрос не по теме . Как бы код обычный, зачем его на С++ писать?
0
|
29 / 29 / 5
Регистрация: 21.04.2012
Сообщений: 282
|
|
05.07.2014, 23:12 [ТС] | 10 |
Это чтение. Там дальше еще распарсивание идет. Просто уже есть реализованная на с++. Надо теперь ее из с# запустить.
0
|
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
|
|||||||||||
05.07.2014, 23:15 | 11 | ||||||||||
Тоже не по теме Вот такие вещи также чем вы в С# ловить собрались
Ладно понял , ну строку там исправьте
0
|
29 / 29 / 5
Регистрация: 21.04.2012
Сообщений: 282
|
|||||||||||
05.07.2014, 23:17 [ТС] | 12 | ||||||||||
MrCold, ну изначально так и было. а из c# я как ее вызову?)
по поводу
1
|
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
|
||||||
05.07.2014, 23:20 | 13 | |||||
Сообщение было отмечено Rabbit13245 как решение
Решение
у вас все уже написано
1
|
29 / 29 / 5
Регистрация: 21.04.2012
Сообщений: 282
|
|
06.07.2014, 00:00 [ТС] | 14 |
MrCold, ахахахахах))) я так специально не писал, думал ругаться будет на несоответствие типов. ахаххахаха
Добавлено через 11 минут все равно не работает( В итоге работы программы получаю пустой файл. Но если запускать все функции, которые в DLL из обычного проекта c++ то все работает... Добавлено через 26 минут Все работает. Просто я не досмотрел кое чего в самом коде функции. Спасибо всем за помощь!
0
|
29 / 29 / 5
Регистрация: 21.04.2012
Сообщений: 282
|
|||||||||||
06.07.2014, 11:50 [ТС] | 16 | ||||||||||
Psilon, поставил x86, но все равно ошибка со строками.
в с++ есть функция
0
|
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
|
||||||
06.07.2014, 12:29 | 17 | |||||
Ну это уже было
Теоретически можно передать по ссылке std::string
если мы принимаем строку из C# в С++ .Но лучше не рисковать и использовать С-стиль.
0
|
Master of Orion
|
|
06.07.2014, 14:55 | 18 |
Rabbit13245, еще раз, НЕ используйте С++ для экспортируемых функций, НЕ ИСПОЛЬЗУЙТЕ. Все сигнатуры должны содержать только структуры, массивы и примитивные типы. Никаких std, ничего. В лучшем случае можно использовать винапишные LPSTR, но это те же char/wchar_t
0
|
06.07.2014, 14:55 | |
06.07.2014, 14:55 | |
Помогаю со студенческими работами здесь
18
Использование функций из dll, написанной в VS2008, в Python-е Использование DLL написанной на C# C++ импорт функций dll написанной на c# Вызов программой, написанной на С++, функции из dll, написанной на Assembler (явное подключение dll) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |