Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > Утечка памяти при работе с OleVariant


Автор: Александра 13.2.2006, 20:26
Как избежать утечки памяти при работе с OleVariant ?

пример:
1. есть процедура, у которой единственный аргумент имеет тип OleVariant.
2. при передаче в эту процедуру строки, она автоматически приводится к OleVariant. Как раз здесь и идет утечка.

MemProof сообщает об SysAllocStringLen. Соответственно нужно вызывать SysFreeString, но она работает только с PWideChar... вообшем запуталась, не могу никак их сдружить (PWideChar и OleVariant).

какие идеи?

Автор: Александра 16.2.2006, 20:24
решение нашлось:

Код
var
   v: OleVariant;
begin
   v:= 'Any String';
   Intf.DoSomeThing( v );

   // в принципе мы и так значем что это WideString, так что проверка типа для надежности:
   if TVarData(v).VType = varOleStr then
   begin // освободим сами WideChar
      SysFreeString( TVarData(v).VOleStr ); // это функция из модуля ActiveX
      // (!) не забыть очистить указатель - мы его сами того
      TVarData(v).VOleStr := nil;
   end;


© RuSA, sources.ru

Автор: December 16.2.2006, 23:05
Спасибо за информацию! А утечка происходит всегда при использовании вышеозначенной схемы или нужны ещё какие-то экзотические условия? Только для строк или для других типов данных также?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)