Главная страница
    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.46 MB
Время: 0.009 c
1-37685
TATIANA
2003-12-26 11:27
2004.01.13
Maskedit - Edit c маской


11-37592
Сызганов Николай
2003-04-21 12:52
2004.01.13
Работа с DBExpress ( D7) из-под КОЛ возможна?


6-37828
Денисыч
2003-11-11 13:49
2004.01.13
Ошибка 12018


1-37774
EugeneP
2003-12-29 13:02
2004.01.13
Adobe Acrobat. Доступ у PDF файлам.


3-37558
Yad
2003-12-15 14:51
2004.01.13
TDbf. Не работает фильтрация по дате.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский