Переключение на Главную Страницу Страницы: 1 ... 6 7 [8] 9 10 ... 14 ОтправитьПечать
Очень популярная тема (более 25 ответов) Ошибка при создании объекта из компоненты (число прочтений - 167485 )
Bess_Tolkovaia
Junior Member
**
Отсутствует


Натуральная блондинка,
1 штука

Сообщений: 89
Местоположение: Минск, РБ
Зарегистрирован: 26. Мая 2006
Пол: Женский
Re: Ошибка при создании объекта из компоненты
Ответ #105 - 22. Июня 2006 :: 12:56
Печать  
Огромное сэнькс Улыбка
Вроде работает, осталось провести опыты на живых юзерах
  
Наверх
ICQ  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка при создании объекта из компоненты
Ответ #106 - 23. Июня 2006 :: 07:28
Печать  
Содержимое данного сообщения было перенесено СЮДА.
  
Наверх
www  
IP записан
 
alexqc
Junior Member
**
Отсутствует



Сообщений: 77
Местоположение: АР Крым, Симферополь
Зарегистрирован: 21. Июня 2006
Пол: Мужской
Re: Ошибка при создании объекта из компоненты
Ответ #107 - 30. Июня 2006 :: 08:30
Печать  
А можно такой вопрос?

HKEY_CLASSES_ROOT фактически состоит из 2-х ключей:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes
и
HKEY_CURRENT_USER\Software\Classes

Все проблемы идут от того, что пытаясь писать в HKEY_CLASSES_ROOT  фактически пишут в HKEY_LOCAL_MACHINE\SOFTWARE\Classes, на что стоит запрет. По идее, в HKEY_CURRENT_USER\Software\Classes такого запрета быть не должно, может можно явно туды писать?
  

Везде - от моря Черного до снежной Колымы - мы трудностям показываем кукиш.
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка при создании объекта из компоненты
Ответ #108 - 30. Июня 2006 :: 09:21
Печать  
Под NT4 не будет работать.
Знаешь, сколько пользователей на NT4 сидят?  Очень довольный
  

De quelle planète es-tu?
Наверх
 
IP записан
 
alexqc
Junior Member
**
Отсутствует



Сообщений: 77
Местоположение: АР Крым, Симферополь
Зарегистрирован: 21. Июня 2006
Пол: Мужской
Re: Ошибка при создании объекта из компоненты
Ответ #109 - 30. Июня 2006 :: 09:53
Печать  
Как вариант - внести в регистри-ресурс обе ветки (HKCR{} и HKCU{SOFTWARE{Classes{}}} ), либо сделать 2 ресурса и подсовывать регистратору разные ресурсы в зависимости от ОС.

Так хоть тех кто на 2000/ХР обрадуете. Знаешь, скока на 2000+ сидят? Улыбка
Тем паче что НТ4 потихоньку уходит....


-----------------

Порывшись в МСДН, я нашел интересную ф-цию RegOverridePredefKey, позволяющую заменить соответствие ключей

The RegOverridePredefKey function maps a predefined registry key to the specified registry key.

LONG RegOverridePredefKey(
  HKEY hKey,     // predefined handle to key
  HKEY hNewHKey  // new handle to key
);

hKey
[in] Handle to one of the following predefined reserved registry key handle values:
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_PERFORMANCE_DATA

hNewHKey
[in] Handle to a key that is predefined or currently open. RegOverridePredefKey remaps hKey to refer to the hNewHKey key. This redirection applies only to the process that calls RegOverridePredefKey.
If hNewHKey is NULL, the function restores the default mapping of the predefined key.



Так получается, если при загрузке dll компоненты выполнить примерно такое

HKEY hNewHKey;
RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Classes", 0, KEY_READ|KEY_WRITE , &hNewHKey  );
RegOverridePredefKey(HKEY_CLASSES_ROOT, hNewHKey);
RegCloseKey(hNewHKey);

тогда вся работа с HKCR перемапится на подветку HKCU. (и может даже не с одной компонентой, а с последующими? это надо проверять, но если так - одним махом решиться проблема со ВСЕМИ компонентами). Работать будет, естественно, только на 2000+, поэтому ее надо через LoadLibrary/GetProcAddress искать.

PS. Я этого не проверял.
« Последняя редакция: 30. Июня 2006 :: 11:04 - alexqc »  

Везде - от моря Черного до снежной Колымы - мы трудностям показываем кукиш.
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка при создании объекта из компоненты
Ответ #110 - 30. Июня 2006 :: 10:38
Печать  
Так вот же - vkloader и решил эту проблему.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка при создании объекта из компоненты
Ответ #111 - 30. Июня 2006 :: 10:39
Печать  
Хотя последние сборки 1С++, начиная с 2.0.3, также умеют работать с любого пути.
Насчет 2022 не уверен.
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка при создании объекта из компоненты
Ответ #112 - 30. Июня 2006 :: 11:34
Печать  
alexqc писал(а) 30. Июня 2006 :: 09:53:
Так получается, если при загрузке dll компоненты выполнить примерно такое

HKEY hNewHKey;
RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Classes", 0, KEY_READ|KEY_WRITE , &hNewHKey  );
RegOverridePredefKey(HKEY_CLASSES_ROOT, hNewHKey);
RegCloseKey(hNewHKey);

тогда вся работа с HKCR перемапится на подветку HKCU. (и может даже не с одной компонентой, а с последующими? это надо проверять, но если так - одним махом решиться проблема со ВСЕМИ компонентами). Работать будет, естественно, только на 2000+, поэтому ее надо через LoadLibrary/GetProcAddress искать.

Хорошо, что ты с этим разбираешься, но вроде сейчас проблема решена уже по разным направлениям.

А в варианте с RegOverridePredefKey() мне интересно, вся работа с COM после этого не накроется? Ужас
Тоже не проверял, боюс. Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
alexqc
Junior Member
**
Отсутствует



Сообщений: 77
Местоположение: АР Крым, Симферополь
Зарегистрирован: 21. Июня 2006
Пол: Мужской
Re: Ошибка при создании объекта из компоненты
Ответ #113 - 30. Июня 2006 :: 12:09
Печать  
kms писал(а) 30. Июня 2006 :: 11:34:
Хорошо, что ты с этим разбираешься, но вроде сейчас проблема решена уже по разным направлениям.

А в варианте с RegOverridePredefKey() мне интересно, вся работа с COM после этого не накроется? Ужас
Тоже не проверял, боюс. Улыбка


Если не секрет, как решена проблема с регистрацией? Если vkloader - то у меня он что-то не всегда взлетает. Поставил, проверил - вроде все ОК, поставил в боевую базу. На след день у энного числа пользователей 1С++ не загрузилась. Меня юзвери чуть на части не порвали.  Круглые глаза
Или его таки под админом разок запустить надо?

Но раз по разным направлениям - значит есть и иные варианты?

Теперь по поводу СОМ - как дойдут руки, специально проверю Улыбка. В любом случае:
1. После отработки регистратора можно вызвать RegOverridePredefKey() с NULL - тогда восстановиться значенеи по-умолчанию;
2. Не все так ужасно - даже если "накроется" СОМ - то тока в пределах текущего процесса.
  

Везде - от моря Черного до снежной Колымы - мы трудностям показываем кукиш.
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка при создании объекта из компоненты
Ответ #114 - 30. Июня 2006 :: 15:02
Печать  
AlexQC
Ну, я тут сторонник старой школы...

У меня во всех конфигурациях добавлена константа "ПутьКХранилищуКомпонент", которая указывает на один и тот же сетевой каталог, в котором лежат компоненты; компоненты грузятся по этому пути.

Таким образом на корню убито 2 цели:
  • проблема перерегистрации
  • проблема отслеживания разных версий

    Т.е. я смотрю на танцы с бубном вокруг проблемы регистрации несколько отстраненно, т.к. уже забыл, что это такое.
  •   

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    alexqc
    Junior Member
    **
    Отсутствует



    Сообщений: 77
    Местоположение: АР Крым, Симферополь
    Зарегистрирован: 21. Июня 2006
    Пол: Мужской
    Re: Ошибка при создании объекта из компоненты
    Ответ #115 - 03. Июля 2006 :: 09:22
    Печать  
    kms писал(а) 30. Июня 2006 :: 15:02:
    AlexQC
    Ну, я тут сторонник старой школы...

    У меня во всех конфигурациях добавлена константа "ПутьКХранилищуКомпонент", которая указывает на один и тот же сетевой каталог, в котором лежат компоненты; компоненты грузятся по этому пути.



    В моем случае ПутьКХранилищуКомпонент не намного лучше чем КаталогИБ(). Все равно придется запускать 1С хоть раз с правами админа. Плюс к тому - у меня есть юзвери, котрые ездят с ноутбуками и локальным срезом базы. Т.е. взял срез, выехал "в поля", что-то там набил, вернулся - затягивает в базу, и работает в ней. У него компоненты по-любому на компе лежать должны.
      

    Везде - от моря Черного до снежной Колымы - мы трудностям показываем кукиш.
    Наверх
     
    IP записан
     
    АЛьФ
    FormEx developer
    1c++ developer
    Отсутствует



    Сообщений: 1538
    Местоположение: Санкт-Петербург
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: Ошибка при создании объекта из компоненты
    Ответ #116 - 23. Августа 2006 :: 11:23
    Печать  
      

    FormEx developer
    Наверх
    www  
    IP записан
     
    PavelS
    Junior Member
    **
    Отсутствует


    I Love YaBB 2!

    Сообщений: 16
    Зарегистрирован: 14. Декабря 2006
    Re: Ошибка при создании объекта из компоненты
    Ответ #117 - 15. Декабря 2006 :: 22:24
    Печать  
    Цитата:

    Замечательная статья, очень помогла. Только вот 1 штуку я понять не могу: без этого ресурса 100 dll грузится и нормально работает (отрабатывает DllMain, создаются СОМ объекты, всё путём) и в реестре прописана - но ЗагрузитьВнешнююКомпоненту проваливается. Выходит, что ЗагрузитьВнешнююКомпоненту работает только если ресурс 100 - пустая строка??? Бред какой-то.
      
    Наверх
     
    IP записан
     
    АЛьФ
    FormEx developer
    1c++ developer
    Отсутствует



    Сообщений: 1538
    Местоположение: Санкт-Петербург
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: Ошибка при создании объекта из компоненты
    Ответ #118 - 16. Декабря 2006 :: 16:31
    Печать  
    PavelS писал(а) 15. Декабря 2006 :: 22:24:
    Цитата:

    Замечательная статья, очень помогла. Только вот 1 штуку я понять не могу: без этого ресурса 100 dll грузится и нормально работает (отрабатывает DllMain, создаются СОМ объекты, всё путём) и в реестре прописана - но ЗагрузитьВнешнююКомпоненту проваливается. Выходит, что ЗагрузитьВнешнююКомпоненту работает только если ресурс 100 - пустая строка??? Бред какой-то.

    Почему бред? Просто особенность реализации функции ЗагрузитьВнешнююКомпоненту в движке 1С.
      

    FormEx developer
    Наверх
    www  
    IP записан
     
    sedmin
    1c++ developer
    Отсутствует


    I Hate Fat YaBB 2!

    Сообщений: 862
    Зарегистрирован: 24. Мая 2006
    Re: Ошибка при создании объекта из компоненты
    Ответ #119 - 18. Июня 2007 :: 12:15
    Печать  
    Я нашел способ решить проблемы регистрации компоненты в реестре.

    Идея состоит в том, что регистрировать ее в HKEY_CURRENT_USER вместо HKEY_LOCAL_MACHINE. Для этого надо в файле ресурса заменить строки
    Код
    Выбрать все
    HKCR
    {
    	Addin.1C++.1 = s 'OXY' 
    
    

    на
    Код
    Выбрать все
    HKCU
    {
    	  Software
    	  {
    		    Classes
    		    {
    				    Addin.1C++.1 = s 'OXY' 
    
    


    После этого не возникает никаких проблем с регистрацией и загрузкой компоненты.

    За? Против? Воздержавшиеся?
      
    Наверх
     
    IP записан
     
    Переключение на Главную Страницу Страницы: 1 ... 6 7 [8] 9 10 ... 14
    ОтправитьПечать