Переключение на Главную Страницу Страницы: 1 ... 10 11 [12] 13 14  ОтправитьПечать
Очень популярная тема (более 25 ответов) Ошибка при создании объекта из компоненты (число прочтений - 168706 )
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Ошибка при создании объекта из компоненты
Ответ #165 - 11. Сентября 2007 :: 15:07
Печать  
Какая-то неправильная статья. Чего-то в ней не хватает.
А! А где же хэппи енд?  Подмигивание
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка при создании объекта из компоненты
Ответ #166 - 11. Сентября 2007 :: 16:03
Печать  
А, да, следующая серия.

Итак, тесты

Тест1 - CPP
Код
Выбрать все
	HKEY key;
	LPOLESTR pstr;
	StringFromCLSID(__uuidof(zlibEngine), &pstr);
	CString cs = "CLSID\\";
	cs += pstr;
	CoTaskMemFree(pstr);
	LONG res = RegOpenKeyEx(HKEY_CLASSES_ROOT, (LPCTSTR)cs, 0, KEY_READ, &key);
	if (res == ERROR_SUCCESS)
		RegCloseKey(key);
	Msg("clsid open result %p", res);

	CComPtr<IzlibEngine> zlib;

	CLSID clsid;
	HRESULT hr = CLSIDFromProgID(OLESTR("v75.zlibEngine"), &clsid);
	Msg("clsid from progid result %p", hr);

	hr = zlib.CoCreateInstance(__uuidof(zlibEngine));
	Msg("zlib creation result %p", hr);
 



Первая часть - чтение CLSID из HKCR/HKLM, после переназначение HKCR в HKCU везде дает ошибку 2 (не найден).
Вторая часть - работа COM системы, на разных системах либо дает ошибку после переназначения, либо нет.

Что интересно, есть отличия даже в поведении 2003 sp1 и xp sp2.
Например, CLSIDFromProgID на 2003 выполняется всегда, а на xp после переобозначения дает ошибку 800401F3 (CO_E_CLASSSTRING).

На 2000 - 2000 sp3 CLSIDFromProgID и CoCreateInstance после переобозначения дают ошибку всегда.

Тест2 - 1С
Код
Выбрать все
Процедура Сформировать()
	_ст =СоздатьОбъект("Система");

	Попытка
		_ст.РегистрироватьКомпонентыВ_HKCU(1);
		_о =СоздатьОбъект("V77.Application");
		Сообщить(_о);
	Исключение
		Сообщить(ОписаниеОшибки(), "!");
	КонецПопытки;

	Попытка
		_ст.РегистрироватьКомпонентыВ_HKCU(0);
		_о =СоздатьОбъект("V77.Application");
		Сообщить(_о);
	Исключение
		Сообщить(ОписаниеОшибки(), "!");
	КонецПопытки;
КонецПроцедуры
 


На 2000 - 2000 sp3 объект будет создан только 1 раз, при активном перенаправлении будет исключение.

Вот такие дела.

Ну и что дальше?
Да, собственно, все.

Сама регистрация компоненты с учетом статической линковки к ATL работоспособна на всех текущих версиях 2000 - 2003 (по поводу vista - не знаю).

Методы RegOverridePredefKey() и РегистрироватьКомпонентыВ_HKCU() имеют серьезные подводные камни.
Не для гражданского применения.

А зачем вообще ты все это пишешь?
Да для истории.

Ради карманных денег,
или всего святого,
или всего того, что...
Словом, всего того...

Всем удачи, за которую никто не спросит. Класс
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка при создании объекта из компоненты
Ответ #167 - 11. Сентября 2007 :: 16:14
Печать  
sedmin писал(а) 11. Сентября 2007 :: 15:07:
А! А где же хэппи енд?  Подмигивание

Курит в тамбуре Улыбка

Я думаю, что результат весьма положительный.
Мы протестировали твой вариант регистрации везде, где только можно.
Мне очень нравится, поддерживаю и буду использовать.

Использование переназначения в других случаях (через РегистрироватьКомпонентыВ_HKCU) мне представляется слишком небезопасным и зависящим от окружения.

Но подводные камни документированы - это плюс.

Так что это дело можно отметить.


Пойду, в холодильнике меня ждут мартини-водка.
Только тссс, а то придет Arta и опять запалит меня Улыбка

  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка при создании объекта из компоненты
Ответ #168 - 11. Сентября 2007 :: 16:18
Печать  
kms писал(а) 11. Сентября 2007 :: 16:14:
Я думаю, что результат весьма положительный.
Мы протестировали твой вариант регистрации везде, где только можно.
Мне очень нравится, поддерживаю и буду использовать.

+1

(шепотом) А Виста? Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Ошибка при создании объекта из компоненты
Ответ #169 - 12. Сентября 2007 :: 04:18
Печать  
kms писал(а) 11. Сентября 2007 :: 16:14:
Я думаю, что результат весьма положительный.
Мы протестировали твой вариант регистрации везде, где только можно.

Ну вот! А ты говорил... Подмигивание

Цитата:
Дорогу осилит идущий.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка при создании объекта из компоненты
Ответ #170 - 12. Сентября 2007 :: 04:32
Печать  
sedmin писал(а) 12. Сентября 2007 :: 04:18:
kms писал(а) 11. Сентября 2007 :: 16:14:
Я думаю, что результат весьма положительный.
Мы протестировали твой вариант регистрации везде, где только можно.

Ну вот! А ты говорил... Подмигивание

Саш, в ветке о выпущенных релизах добавь, плиз, сообщение, что можно качать, чтобы народ не путать Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Ошибка при создании объекта из компоненты
Ответ #171 - 12. Сентября 2007 :: 04:35
Печать  
kms писал(а) 11. Сентября 2007 :: 16:03:
Что интересно, есть отличия даже в поведении 2003 sp1 и xp sp2.
Например, CLSIDFromProgID на 2003 выполняется всегда, а на xp после переобозначения дает ошибку 800401F3 (CO_E_CLASSSTRING).

На 2000 - 2000 sp3 CLSIDFromProgID и CoCreateInstance после переобозначения дают ошибку всегда.

Вижу стандатный результат процесса разработки. У нас происходит то же самое. Не думаю, что в Microsoft процесс идет иначе.

А что, у вас все делается с первого раза?  Подмигивание

kms писал(а) 11. Сентября 2007 :: 16:03:
Тест2 - 1С
Код
Выбрать все
		_ст.РегистрироватьКомпонентыВ_HKCU(1);
		_о =СоздатьОбъект("V77.Application"); 


На 2000 - 2000 sp3 объект будет создан только 1 раз, при активном перенаправлении будет исключение.

Ну я, вообще-то и не предполагал использовать РегистрироватьКомпонентыВ_HKCU() для создания объектов класса V77.Application. Мне нужны компоненты, разработанные по методике из книжки 1С "Создание внешних компонент". А если найдутся экстремалы, которые будут использовать метод для чего-попало, то это их дело.

Вот список интересующих меня компонент:
  • наша самописная компонента;
  • v7plus.dll;
  • SPFlexLocks.dll от Софтпоинта;
  • какая-то там компонента работы с почтой;
  • какая-то там компонента работы со сканером;
  • svcsvc.dll - вот интересно, с ней все нормально пройдет?
    еще
  • компоненты сканера штрих-кодов;
  • компоненты кассовых аппаратов.
  •   
    Наверх
     
    IP записан
     
    berezdetsky
    1c++ power user
    Отсутствует


    barba non facit sisadminum

    Сообщений: 1986
    Местоположение: Москва
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: Ошибка при создании объекта из компоненты
    Ответ #172 - 12. Сентября 2007 :: 06:21
    Печать  
    artbear писал(а) 11. Сентября 2007 :: 16:18:
    kms писал(а) 11. Сентября 2007 :: 16:14:
    Я думаю, что результат весьма положительный.
    Мы протестировали твой вариант регистрации везде, где только можно.
    Мне очень нравится, поддерживаю и буду использовать.

    +1

    (шепотом) А Виста? Улыбка

    Под Вистой обе ночные сборки от 10.09 при загрузке через ЗагрузитьВнешнююКомпоненту выдают "не найден интерфейс IInitDone". VKLoader обе эти сборки загружает без ошибок. У рекомендованых релизов с ЗагрузитьВнешнююКомпоненту всё нормально.
      

    пароль как коньяк, чем больше звездочек, тем лучше
    Наверх
    IP записан
     
    sedmin
    1c++ developer
    Отсутствует


    I Hate Fat YaBB 2!

    Сообщений: 862
    Зарегистрирован: 24. Мая 2006
    Re: Ошибка при создании объекта из компоненты
    Ответ #173 - 12. Сентября 2007 :: 06:33
    Печать  
    berezdetsky писал(а) 12. Сентября 2007 :: 06:21:
    VKLoader обе эти сборки загружает без ошибок.

    О проблемах загрузки компонент через vkloader есть отдельная ветка.
    В частности, если кто печатает штрих-коды через BARCODE.OCX, то ждите, они к вам придут...  Подмигивание
      
    Наверх
     
    IP записан
     
    berezdetsky
    1c++ power user
    Отсутствует


    barba non facit sisadminum

    Сообщений: 1986
    Местоположение: Москва
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: Ошибка при создании объекта из компоненты
    Ответ #174 - 12. Сентября 2007 :: 06:50
    Печать  
    sedmin писал(а) 12. Сентября 2007 :: 06:33:
    berezdetsky писал(а) 12. Сентября 2007 :: 06:21:
    VKLoader обе эти сборки загружает без ошибок.

    О проблемах загрузки компонент через vkloader есть отдельная ветка.
    В частности, если кто печатает штрих-коды через BARCODE.OCX, то ждите, они к вам придут...  Подмигивание

    О чём и речь - с VKLoader проблем нету. Проблемы есть с новым механизмом загрузки. BarCode, к стати, я активно использую.

    Меня это не напрягает - я лишь разместил объяву ответил на вопрос artbear.
      

    пароль как коньяк, чем больше звездочек, тем лучше
    Наверх
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: Ошибка при создании объекта из компоненты
    Ответ #175 - 12. Сентября 2007 :: 22:06
    Печать  
    berezdetsky писал(а) 12. Сентября 2007 :: 06:21:
    Под Вистой обе ночные сборки от 10.09 при загрузке через ЗагрузитьВнешнююКомпоненту выдают "не найден интерфейс IInitDone". VKLoader обе эти сборки загружает без ошибок. У рекомендованых релизов с ЗагрузитьВнешнююКомпоненту всё нормально.

    А у тебя галка "выполнять от имени администратора" на закладке совместимость стоит?
    На вариантах 1cpp с регистрацией в HKCU не надо бы ее ставить.

    all
    С вистой, кмк, все не так страшно

    1. да, есть проблема с регистрацией TypeLib в HKCR (примерно как описано на форуме проекта RegSvrEx
    http://www.codeproject.com/w2k/regsvrex.asp?df=100&forumid=14060&exp=0&select=19...

    что делать - ну давайте не будем регистрировать TypeLib, все равно она не нужна
    Код
    Выбрать все
    	HRESULT hr = _Module.RegisterServer(FALSE);
     
    
    


    2. При закрытии 1С процесс выпадает в осадок - надо смотреть

    berezdetsky
    а у тебя как? есть такое?
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    sedmin
    1c++ developer
    Отсутствует


    I Hate Fat YaBB 2!

    Сообщений: 862
    Зарегистрирован: 24. Мая 2006
    Re: Ошибка при создании объекта из компоненты
    Ответ #176 - 13. Сентября 2007 :: 06:02
    Печать  
    kms писал(а) 12. Сентября 2007 :: 22:06:
    что делать - ну давайте не будем регистрировать TypeLib, все равно она не нужна
    Код
    Выбрать все
    	HRESULT hr = _Module.RegisterServer(FALSE);
     
    
    

    А объясните мне темному, для чего он вообще нужен? Чтобы какими-то внешними срествами смотреть описание классов компоненты?
      
    Наверх
     
    IP записан
     
    berezdetsky
    1c++ power user
    Отсутствует


    barba non facit sisadminum

    Сообщений: 1986
    Местоположение: Москва
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: Ошибка при создании объекта из компоненты
    Ответ #177 - 13. Сентября 2007 :: 08:40
    Печать  
    kms писал(а) 12. Сентября 2007 :: 22:06:
    berezdetsky писал(а) 12. Сентября 2007 :: 06:21:
    Под Вистой обе ночные сборки от 10.09 при загрузке через ЗагрузитьВнешнююКомпоненту выдают "не найден интерфейс IInitDone". VKLoader обе эти сборки загружает без ошибок. У рекомендованых релизов с ЗагрузитьВнешнююКомпоненту всё нормально.

    А у тебя галка "выполнять от имени администратора" на закладке совместимость стоит?
    На вариантах 1cpp с регистрацией в HKCU не надо бы ее ставить.

    Не помню, если по дефолту не ставится, то не стоит. UAC отключен, пользователь - админ.

    kms писал(а) 12. Сентября 2007 :: 22:06:
    2. При закрытии 1С процесс выпадает в осадок - надо смотреть

    berezdetsky
    а у тебя как? есть такое?

    При загрузке через ЗагрузитьВнешнююКомпоненту есть, через VKLoader нет.
      

    пароль как коньяк, чем больше звездочек, тем лучше
    Наверх
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: Ошибка при создании объекта из компоненты
    Ответ #178 - 13. Сентября 2007 :: 19:54
    Печать  
    sedmin писал(а) 13. Сентября 2007 :: 06:02:
    для чего он вообще нужен? Чтобы какими-то внешними срествами смотреть описание классов компоненты?

    http://www.rsdn.ru/article/com/typeinfo.xml?print
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    sedmin
    1c++ developer
    Отсутствует


    I Hate Fat YaBB 2!

    Сообщений: 862
    Зарегистрирован: 24. Мая 2006
    Re: Ошибка при создании объекта из компоненты
    Ответ #179 - 13. Сентября 2007 :: 20:39
    Печать  
    Блин, Михаил, любишь ты статьями грузить.  Улыбка
    Нет бы сказать в двух словах. А то если я этого не читал, то ты и разговаривать со мной не хочешь.  Подмигивание

    PS. Я вот, может, тоже думал, что Typelib регистрировать ни к чему. Только сказать стеснялся.  Улыбка
      
    Наверх
     
    IP записан
     
    Переключение на Главную Страницу Страницы: 1 ... 10 11 [12] 13 14 
    ОтправитьПечать