Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Вопрос по работе с памятью

Ответить
Настройки темы
.NET - Вопрос по работе с памятью

Новый участник


Сообщения: 21
Благодарности: 0

Профиль | Отправить PM | Цитировать


Нужно передать в качестве параметра указатель на массив. Я так понимаю, есть несколько способов это сделать.

1. С помощью указателя

Код: Выделить весь код
char array =... //задаем массив
SizeIn = sizeof(char) * array.Length;
IntPtr Out= IntPtr.Zero;
int SizeOut;
           unsafe
                {
                    fixed (char* p = &array[0])
                    {
                        IntPtr In= new IntPtr(p);

                        int result = WrappedOrdercl.WrappedOrdercl.ExecQuery(SizeIn, In, out  SizeOut, out   Out);

                    }
                }
//// полученный результат обрабатывается следующим образом
char* newp = (char*)Out.ToPointer();                
for (int i = 0; i < SizeOut/sizeof(char); i++)
     {
        newarray[i] = *newp;
        ++newp;
     }
2. С помощью Marshal

Код: Выделить весь код
SizeIn = sizeof(char) * array.Length;
IntPtr In= Marshal.AllocHGlobal(SizeIn);
IntPtr Out= IntPtr.Zero;
int SizeOut;
Marshal.Copy(array, 0, In, array.Length);
int result = WrappedOrdercl.WrappedOrdercl.ExecQuery(SizeIn, In, out  SizeOut, out   Out);

//// полученный результат обрабатывается следующим образом
Marshal.Copy(Out, Answ, 0, SizeOut/ sizeof(char));
Marshal.FreeHGlobal(In);
Marshal.FreeHGlobal(Out);

Посоветуйте, какой подход когда лучше использовать и какие могут быть подводные камни. Например, во втором случае выделенная память в куче совобождается посредством FreeHGlobal, а при использовании указателя какие-либо действия по очистке нужны? Указатель, как я понимаю, тоже в неуправляемой памяти создается.

Спасибо.

Отправлено: 16:51, 11-12-2012

 

Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


navab, массив - это объект, а объект и так передаётся по ссылке

Отправлено: 10:46, 14-12-2012 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Вопрос по работе с памятью

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
HDD - Вопрос по работе в DMDE van_De_Star Накопители (SSD, HDD, USB Flash) 2 06-09-2012 17:02
Вопрос по работе вентилятора Kamuflych Разгон, охлаждение и моддинг 3 10-11-2011 15:20
Вопрос по работе форумов, индексы The Dream Флейм 2 06-08-2011 15:52
Разное - [решено] вопрос по работе HDD sasa74 Microsoft Windows Vista 4 26-12-2009 20:30
Вопрос по работе JS и VBS скриптов hasherfrog Microsoft Windows Vista 0 19-10-2006 12:39




 
Переход