Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
49 / 49 / 2
Регистрация: 17.07.2011
Сообщений: 318
1

Передача в функцию указателя на указатель

25.01.2014, 21:17. Показов 4941. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Неуправляемая функция типа FUNC(int ** r);
Делаю так
C#
1
2
3
4
5
6
7
8
9
10
11
fixed (int* ptr = arr)
            {
                FUNC((int **)ptr);
                и так
                FUNC(ptr);           
            }
 
[DllImport("dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto, SetLastError = true)]
        static unsafe extern void FUNC(int * r);
[DllImport("dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto, SetLastError = true)]
        static unsafe extern void FUNC(int ** r);
Работают оба варианта, какой использовать?
Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.01.2014, 21:17
Ответы с готовыми решениями:

Передача умного указателя в функцию принимающую указатель на указатель
Итак имеется функция со следующим параметром: HRESULT __stdcall Function(SomeClass **param); ...

Передача указателя на указатель в функцию
Вопрос к знатокам: Есть абстрактный класс(Symbol) и его производный (Cross). Создаю указатель этого...

Передача в функцию указателя на указатель
Добавление нового элемента в начало списка: void Add_Beg(List **u, Data &x) // Почему в 1...

Передача в функцию указателя на указатель на одномерный массив
Как изменить следующий код, чтобы в функции addValue в качестве первого входного параметра...

9
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
25.01.2014, 21:30 2
Я немного сбит с толку. Это c++ или c# ?

Добавлено через 3 минуты
В шарпе разве есть указатели?
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
25.01.2014, 21:42 3
Я правильно понял, что имеется указатель и нужно передать в некую функцию указатель на него, т.о. указатель на указатель?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
25.01.2014, 21:49 4
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Я немного сбит с толку. Это c++ или c# ?
шарп же..
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
В шарпе разве есть указатели?
http://msdn.microsoft.com/ru-r... zs44b.aspx
0
49 / 49 / 2
Регистрация: 17.07.2011
Сообщений: 318
26.01.2014, 08:13  [ТС] 5
Да, неуправляемая функция находится в dll на с++, вызов из сишарп.
Вопрос в том как передавать из двух вариантов.
Вопрос наверно больше к знатокам с++, потому как непонятно как обрабатываются указатели процессором, но похоже что делает выборку до значения.
0
Администратор
Эксперт .NET
9602 / 4744 / 761
Регистрация: 17.04.2012
Сообщений: 9,592
Записей в блоге: 14
26.01.2014, 15:34 6
Полагаю, что этот
C#
1
2
[DllImport("dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto, SetLastError = true)]
static unsafe extern void FUNC(int ** r);
Из его сигнатуры сразу видно, что методу нужен указатель на указатель.
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
26.01.2014, 16:31 7
Цитата Сообщение от danrusm Посмотреть сообщение
C#
1
FUNC((int **)ptr);
Замените на
C#
1
FUNC(&ptr);
1
49 / 49 / 2
Регистрация: 17.07.2011
Сообщений: 318
26.01.2014, 17:48  [ТС] 8
Компилятор пишет нельзя получить адрес переменной только для чтения.
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
26.01.2014, 18:04 9
Цитата Сообщение от danrusm Посмотреть сообщение
нельзя получить адрес переменной только для чтения.
C#
1
2
int* temp = ptr;
FUNC(&temp);
1
49 / 49 / 2
Регистрация: 17.07.2011
Сообщений: 318
26.01.2014, 20:04  [ТС] 10
А можно получить комментарии по поводу того что оба варианта работают?
И ещё вот такой способ обеспечит правильный вызов?
C#
1
2
3
4
5
6
7
 static unsafe void myf(ref Int32[] arr)
        {
            fixed (int* ptr = arr)
            {
                FUNC(ptr);
            }
        }
0
26.01.2014, 20:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2014, 20:04
Помогаю со студенческими работами здесь

Зачем передавать в функцию X указатель на callback функцию, если последняя ВНЕШНЯЯ и вызовется БЕЗО ВСЯКОГО УКАЗАТЕЛЯ?
Собсно. То есть ребята, вот пример отсюда: http://www.cplusplus.com/reference/algorithm/count_if/...

разница между указатель на функцию и функция возврата указателя?
подскажите пожалуйста очень срочно надо (вопрос на зачет)

Передача указателя на шаблонную функцию в другую функцию
Пишу тест для нескольких улучшений квиксорта с измерением времени. Функция benchmark принимает...

Передача указателя в функцию
Здравствуйте. Прошу помощи, сижу уже пару часов читаю мануалы, но так и не смог до конца понять,...

передача указателя на функцию
Помогите исправить ошибку уже незнаю как быть В бивает ту ошибку error C2664: Generate:...

Передача указателя на функцию
Доброго дня Форумчане. Хотелось бы узнать как вызывать функцию получив на нее указатель? пример...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru