![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| vlsaf |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 423 Регистрация: 9.5.2007 Репутация: нет Всего: 1 |
Есть некая dll, написанная на С++ и в ней нужная функция.
Функция принимает некий одномерный массив A типа double и размерностью N. Возвращает другой массив B и той размерности, которой сочтет нужным. Т.е. заранее выделять память под массив B я не могу. Вопрос, как в функцию передать ссылку на массив B и после выполнения получить в C# полноценный массив? Вот так не работает:
В с++ память под массив B выделяется. Массив заполняется нужными значениями (коллега выводит на консоль результаты). А вот при передаче массива обратно в C# лезет ошибка "Попытка чтения или записи в защищенную память.". Если кто знает, как это грамотно это сделать, напишите пож-та. |
|||
|
||||
| micronic |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 30.12.2013 Репутация: нет Всего: нет |
К сожалению, я не имею DLL, написанной на С++ и возвращающей массив подобный вашему, а наугад писать код не люблю.
Но очень рекомендую посмотреть в сторону System.Runtime.InteropServices.Marshal - уверен, этот класс позволит вам решить не только текущую проблему. |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 5 Всего: 118 |
То, что возвращается вам должно иметь размер. Размер этот для C-Style массивов надо передавать отдельно. В тоже время если вспомнить COM, то там есть тип SAFEARRAY, который по-сути является структурой, содержащий кроме всего прочего и размер.
Короче нарисовал вам два примера: с C-Style массивом и в SAFEARRAY-ем... //вот только во втором случае надо подумать и проверить на течи памяти, конечно. А в первом случае делать функцию удаления (на c++) созданного массива. Это сообщение отредактировал(а) jonie - 25.4.2014, 20:17 Присоединённый файл ( Кол-во скачиваний: 2 )
TestMarshal.rar 6,06 Kb-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |