Главная страница
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.016 c
3-37577
Mikka
2003-12-14 14:20
2004.01.13
Сервер БД SQL Server


3-37520
mtech
2003-12-16 17:56
2004.01.13
Кто работал с DBISAM??!!!


14-37857
Flar
2003-12-23 03:23
2004.01.13
Hook мне винда а Я ей в ответ НИЧЕГО


1-37707
@tom
2003-12-24 20:28
2004.01.13
Ошибка загрузки файла в RichEdit


14-37886
pohil
2003-12-19 12:52
2004.01.13
Я делаю администрирование сети, как мне показать что творится...