Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.13;
Скачать: CL | DM;

Вниз

Работа с ActiveDesktop через CreateComObject (KOLComObj)   Найти похожие ветки 

 
Ал   (2003-04-24 13:07) [0]

1) Почему при подключении к D6 KOLComObj размер файла уменьшается лишь на 1 кБайт, по сравнению с ComObj (расчитывал, что выигрыш будет побольше);

2) Делал CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop в существенно разных KOL программах на одной и той же машине под Win98.
С помощью IActiveDesktop менял обои.
Одна программа работает, в другой ломается с кодом ошибки, который не описан в API-справке на CreateComObject.
И в той и в другой пробовал подключать и KOLComObj и ComObj - все равно в одной работает, в другой ломается.

Понимаю, что дело во второй программе. Но может кто-то уже сталкивался - подскажете, какие ситуации бывают, с чем может конфликтовать CreateComObject. А так придется искать во второй проге, с чем конфликтует CreateComObject. Трудоемко, так как программы существенно различаются по коду. Знатоки, подскажите!


 
Boguslaw   (2003-04-24 19:43) [1]

Object created by CreateComObject should be deleted later I think. Probably this is system unique like semaphor ?


 
Ал   (2003-04-25 15:33) [2]

Думаю, что нет, так как в тестовой программе многократно создавал (без удаления) один и тот же объект
ActiveDesktop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
и многократно запускал ее - все работает нормально.
Возможно, утечка памяти - не анализировал. Но это другой вопрос.

А вот в целевой программе, вероятно, конфликт с уже имеющимся кодом. Где и какой - нужно скурпулезно искать и анализировать. Думал, может кто подскажет хотя бы направление. Прога на KOL, поэтому и спрашиваю.


 
Boguslaw   (2003-04-25 18:34) [3]

Look at :
http://msdn.microsoft.com/msdnmag/issues/01/05/c/default.aspx

and also

http://www.delphi32.com/info_facts/faq/faq_891.asp

Probably You forget : CoInitialize(nil) at startup or have old Shell library.


 
Boguslaw   (2003-04-25 19:43) [4]

What about this :


program RegTest2;

uses
Windows,
KOL,KOLComObj,ActiveX,ShlObj;

procedure TurnActiveDesktop(state:Bool);
const
CLSID_ActiveDesktop: TGUID = "{75048700-EF1F-11D0-9888-006097DEACF9}";
var
ie:IActiveDesktop;
opt:TCOMPONENTSOPT;
begin
ie:= CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
opt.dwSize := sizeof(opt);
opt.fActiveDesktop := state;
opt.fEnableComponents := state;
ie.SetDesktopItemOptions(opt,0);
ie.ApplyChanges(AD_APPLY_REFRESH);
end;


begin
CoInitialize(nil);
TurnActiveDesktop(true);
end.


 
Ал   (2003-04-30 11:53) [5]

Спасибо, Богуслав!

Действительно - дело в CoInitialize(nil).

Причем вызов CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop в D4 прекрасно срабатывал и без предварительного CoInitialize(nil).
А в D6 действительно нужно сначала CoInitialize(nil), причем в самом начале программы перед другими операторами (согласно справке).


 
Boguslaw   (2003-04-30 16:15) [6]

Good.I couldn"t test it maybe becouse I have Windows XP - it"s not working or ActiveDesktop is not installed or Microsoft drop support for ActiveDesktop in Windows XP - I don"t know.


 
Fantasist.   (2003-04-30 22:01) [7]


> Причем вызов CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop
> в D4 прекрасно срабатывал и без предварительного CoInitialize(nil).


Угу. Потому что там вызов CoInitialize происходит в секции initialization какого-то из подключаемых модулей.


 
Ал   (2003-05-02 02:21) [8]

To Fantasist

В секции initialization модуля KOLComObj (или ComObj - кому как нравится).
Но не понятно, почему в D4 работает, а в D6 - нет?



Страницы: 1 вся ветка

Текущий архив: 2004.01.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
1-37657
Anderson
2003-12-26 18:42
2004.01.13
Как в Мемо узнать число видимых строк?


14-37893
vic_774N
2003-12-21 12:54
2004.01.13
Ищу компонент или набор компонентов


1-37617
ИМХО
2003-12-28 10:50
2004.01.13
TListView и картинки


1-37703
Delphi_Ghost
2003-12-30 15:31
2004.01.13
Как найти компонент на форме, зная его Top и Left?


1-37608
mik_1
2003-12-28 18:29
2004.01.13
прерывание исполнения программы