![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| kiler4747 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 28.2.2011 Репутация: нет Всего: нет |
Как передать массив из C# в C++(dll), но мне еще нужно изменить этот массив в C++?
Я не понимаю смысла: [MarshalAs(UnmanagedType.LPArray, SizeConst = 81)], мне казалось что эта строчка выделяет память для массива, но массив остается равен null, а при po[num] = map.pole[i][j]; возникает ошибка: Запись или чтение из защищенной памяти. Но при создании массива: ff = new int[81]; ошибка исчезает но массив после функции StartSudokyProfi содержит только один элемент |
||||
|
|||||
| Ky7m |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 8.4.2008 Репутация: 1 Всего: 2 |
По поводу передачи массива из одного вида памяти в другую. Почему нельзя попробывать передавать массив следующим образом:
А импорт с Dll примерно такой:
И я бы возвращал обработанный массив выходным параметром функции. |
||||
|
|||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
она просто подсказывает CLR что при маршалинге память под эту штуку (в размере 81 элемента) не надо переносить (при сжатии) или удалять (при отработке GC) .. наверно.. читайте MSDN ... еще посмотрите на PInvoke.net примеры функций WinAPI которые возращают данные - что там написано.. -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| kiler4747 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 28.2.2011 Репутация: нет Всего: нет |
Разобрался:
[DllImport("Sudoky(dll).dll", CallingConvention = CallingConvention.Cdecl)] public static extern bool StartSudokyProfi(ref int[] pol, [MarshalAs(UnmanagedType.LPArray, SizeConst = 81)] ref int[] po); Какой параметр в функции C++ нужно прописать чтобы можно было передавать 2-х мерные масссивы?
Возникает ошибка: Чтение или запись в защищенную память. |
||||
|
|||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |