Мне кажется более правильным удалять объект до CoUnInitialize, а не ждать, пока он удалится деструктором после CoUnInitialize. И, кстати, что будет происходить с неудалённым fIMalloc после CoUnInitialize?
------------ Дoбавленo:
Вынес
#pas
initialization
CoInitialize(nil);
finalization
CoUninitialize;
А вот как ты объяснишь тот факт, что если убрать fIDBInitialize := nil, который я добавил в деструктор, то появляется утечка памяти?
------------ Дoбавленo:
И кстати, не забудь про StringToOleStr в TDataSource.Initialize