![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
передача поинтеров в длл и обратно [D7, WinXP]
Кузя © (2009-03-03 13:42:00)Всем доброго дня!
Имеется у меня такое:
приложение использует дллки загруженные с помощью LoadLibrary
в этих дллках имеютя функции вида
TProcEditData = function(var ptr: pointer;var size: dword): boolean stdcall;
прога передаёт в длл ptr на некоторую память размера сайз .. ну это понятно
длл использует эту дату и возращает обратно уже новый ptr и size
прога освобождает память старого ptr
--
Вопрос:
чую некорректно использовать в проге для выделения памяти GetMem
потомучто
..
GetMem(ptr,size);
<копи нужное в ptr^>
OldPtr := ptr; OldSize := size;
EditProc(ptr,size) // это в длл
FreeMem(OldPtr,OldSize);
..
вот до сюда всё работает нормально
но когда пытаюсь сделать FreeMem(ptr, size) (ptr и size из длл получено) , что-то начинает сбоить. При том ДЛЛ вроде про этот поитер забывает сразу.. всмысле потом не использует нигде
Научите\обьясните))
--
и еще для выгрузки длл загруженной с помощью LoadLibrary достаночно вызова FreeLibrary? а то при попытке перезагрузить дллки тоже чото сбоит. Может еще какойнить фрихэндл нужен?
Спасибо.
Кузя (2009-03-03 13:56:00) [21]ну их длл создала
правельнее было написать
GetMem(ptr,size);
<копи нужное в ptr^>
OldPtr := ptr; OldSize := size;
EditProc(ptr,size) // это в длл
FreeMem(OldPtr,OldSize);
<использование того что прислала дллка> //тут все нормально
FreeMem(ptr, size) - а тут сбой
при том ДЛЛ еще не выгружена
Сергей М. (2009-03-03 13:49:00) [22]
> длл .. возращает обратно уже новый ptr и size
Они откуда, "новые", там взялись ? С луны свалились ?
А ведь именно в этом ключевоймомент !