Переключение на Главную Страницу Страницы: [1] 2 3 4 ОтправитьПечать
Очень популярная тема (более 25 ответов) предопределенные процедуры глоб. модуля (число прочтений - 16307 )
lamer
Junior Member
**
Отсутствует



Сообщений: 25
Местоположение: Белоруссия
Зарегистрирован: 25. Февраля 2008
Пол: Мужской
предопределенные процедуры глоб. модуля
25. Февраля 2008 :: 12:57
Печать  
вопрс заключается в след:

при написании внеш. комп. написан следующий код
pGlobMod - указатель на глобальный модуль
pModule = new CBLModule7();// пишу по памяти, возжно допущу синтактическю ошибку

pMod.AssignSource(/*указатель на глоб. контекс*/);
pMod.AssignContext(/*указатель на текст модуля*/)
pMod->Compile();
pMod->PrepareToLoad();
pMod.Load();
pMod->AssignFriendModule(pGlobMod);
pGlobMod->AssignFriendModule(pMod);
pMod->Execute();
и все нормально работате - т.е  /*указатель на текст модуля*/ компилируется
и работает как допольнительны глоб. модуль.

НО НЕ ВЫЗЫВАЮТСЯ ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ
(при завершении работы системы())
написанные в дополнительном глоб. модуде.
может кто подскажет в чем засада?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: предопределенные процедуры глоб. модуля
Ответ #1 - 27. Февраля 2008 :: 11:55
Печать  
Либо самостоятельно реализуй работу с событиями наподобие ФормЕкс, либо подключай доп.глобальник через ФормЕкс - класс Сервис, в этой ВК все эти вопросы проработаны.
  

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



Сообщений: 25
Местоположение: Белоруссия
Зарегистрирован: 25. Февраля 2008
Пол: Мужской
Re: предопределенные процедуры глоб. модуля
Ответ #2 - 13. Марта 2008 :: 14:32
Печать  
спасибо за совет.
я попытался разобраться с событиями, прикинул и решил проблему другим способом
Вопрос для ARTBEARa или АЛьФa :
как при загрузке ВК опрделить что глобалный модуль выполнил все строки,
написанные в глобальном модуле программистом 1С.

в функции STDMETHODIMP CAddIn::Init(IDispatch *pConnection) создается
отдельный поток, который должен выполнить определенный код (в глобальном модуле
меняется исходный текст, после чего он заново компилится) ТОЛЬКО после выполнения всех
строк глоб модуля.
возможно ли такое, просто не хочется писать Sleep(6000),
6000 - от балды, чтоб наверняка. Хотелось бы более синхронизировано
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: предопределенные процедуры глоб. модуля
Ответ #3 - 13. Марта 2008 :: 19:43
Печать  
Настоятельно не рекомендую продолжать действовать в этом направлении. Большая вероятность того, что на выходе получишь крах системы.
Простейший пример:
- в глобальнике при старте открывается обработка.
- модуль этой обработки при компилировании связывается с существующим глобальником
- ты, после окончательного старта, меняешь глобальник и перекомпилируешь его
Итог: при обращении к глобальным процедурам из обработки, открытой до замены, получаешь вылет.

Чем не устраивают варианты, которые предложил Артур?
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: предопределенные процедуры глоб. модуля
Ответ #4 - 14. Марта 2008 :: 06:07
Печать  
АльФ прав.
+ работа в отдельном потоке с данными 1С почти наверняка приведет к краху - 1С нифига не многопоточная, проверено - сам делал в 1С++ класс "Поток", сплошные падения Печаль !
  

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



Сообщений: 25
Местоположение: Белоруссия
Зарегистрирован: 25. Февраля 2008
Пол: Мужской
Re: предопределенные процедуры глоб. модуля
Ответ #5 - 14. Марта 2008 :: 10:38
Печать  
ситуация в следующем:
при загрузке системы 1С-ка компилирует глобальный модуль
далее в конце глобальника написано:
     Если (LoadAddin(имяФайлаВК.Dll) = 0) Тогда
           Сообщить("Не загрузили");
     КонецЕсли;

  
Наверх
 
IP записан
 
lamer
Junior Member
**
Отсутствует



Сообщений: 25
Местоположение: Белоруссия
Зарегистрирован: 25. Февраля 2008
Пол: Мужской
Re: предопределенные процедуры глоб. модуля
Ответ #6 - 14. Марта 2008 :: 11:00
Печать  
Продрлжение для сообщения выше
(случайно отправил)

АЛьФ, а как ты в своей компоненте защиты глобальник после декодирования подсовываеш?
если не секрет конечно.
я с подменой кода "На лету" сво всех модулях разобрался, вот только в глобальнике застрял.
мне смысла особого нет, чтобы запускать второй глобальник, можно первый перекомпилить
вот только нюанс один - компилить надо после выполнения всех строк глобального модуляи (иначе
исключение в blang.dll) и перед любым действием пользователя.

а по поводу организовать работу с событиями - это interface IAsyncEvent использовать?

P.S.  а отдельный поток не всегла рушит систему
  
Наверх
 
IP записан
 
lamer
Junior Member
**
Отсутствует



Сообщений: 25
Местоположение: Белоруссия
Зарегистрирован: 25. Февраля 2008
Пол: Мужской
Re: предопределенные процедуры глоб. модуля
Ответ #7 - 14. Марта 2008 :: 12:19
Печать  
по поводу  отдельного потока так если в тексте глобального молдуля вызывается
функция Предупреждение() то все работает как часы,
а если не вызывать- то при if(pGlobMod->Execute() != 0) иключение вылезает
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: предопределенные процедуры глоб. модуля
Ответ #8 - 14. Марта 2008 :: 12:19
Печать  
lamer писал(а) 14. Марта 2008 :: 11:00:
P.S.  а отдельный поток не всегла рушит систему

Я сам такое видел, но вся работа настолько не стабильна, что пришлось отказаться от использования класса "Поток" в 1С++ Печаль
  

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



Сообщений: 25
Местоположение: Белоруссия
Зарегистрирован: 25. Февраля 2008
Пол: Мужской
Re: предопределенные процедуры глоб. модуля
Ответ #9 - 14. Марта 2008 :: 12:22
Печать  
а не подскажеш почему, если в тексте глобального модуля вызывается 
функция Предупреждение() то все работает,
а если не вызывать- то при if(pGlobMod->Execute() != 0) иключение вылезает
что меняется в стабильности работы 1С при вызове Предупреждение()
  
Наверх
 
IP записан
 
lamer
Junior Member
**
Отсутствует



Сообщений: 25
Местоположение: Белоруссия
Зарегистрирован: 25. Февраля 2008
Пол: Мужской
Re: предопределенные процедуры глоб. модуля
Ответ #10 - 14. Марта 2008 :: 12:24
Печать  
Для сообщения выше:
глобальник компилируется в отдельном потоке
и при вызове Предепреждение() - все ОК
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: предопределенные процедуры глоб. модуля
Ответ #11 - 14. Марта 2008 :: 12:27
Печать  
lamer писал(а) 14. Марта 2008 :: 12:22:
а не подскажеш почему, если в тексте глобального модуля вызывается  
функция Предупреждение() то все работает,
а если не вызывать- то при if(pGlobMod->Execute() != 0) иключение вылезает
что меняется в стабильности работы 1С при вызове Предупреждение()

А ты подумай Улыбка
Ведь в это время основной поток почти наверняка блокируется, работают только сообщения Винды, т.е. код 1С не выполняется, и твой собственный поток может спокойно работать, не пересекаясь с работой основного потока.
  

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: предопределенные процедуры глоб. модуля
Ответ #12 - 14. Марта 2008 :: 12:29
Печать  
Выше вместо
artbear писал(а) 14. Марта 2008 :: 12:27:
Ведь в это время

должно быть так
Ведь во время показа окна Предупреждения
  

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



Сообщений: 25
Местоположение: Белоруссия
Зарегистрирован: 25. Февраля 2008
Пол: Мужской
Re: предопределенные процедуры глоб. модуля
Ответ #13 - 14. Марта 2008 :: 12:29
Печать  
как организовать работу с событиями - это interface IAsyncEvent использовать?
может просветите поподробней?
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: предопределенные процедуры глоб. модуля
Ответ #14 - 14. Марта 2008 :: 13:11
Печать  
lamer писал(а) 14. Марта 2008 :: 11:00:
Продрлжение для сообщения выше
(случайно отправил)

АЛьФ, а как ты в своей компоненте защиты глобальник после декодирования подсовываеш?
если не секрет конечно.
я с подменой кода "На лету" сво всех модулях разобрался, вот только в глобальнике застрял.
мне смысла особого нет, чтобы запускать второй глобальник, можно первый перекомпилить
вот только нюанс один - компилить надо после выполнения всех строк глобального модуляи (иначе
исключение в blang.dll) и перед любым действием пользователя.

а по поводу организовать работу с событиями - это interface IAsyncEvent использовать?

P.S.  а отдельный поток не всегла рушит систему

Конкурент? Улыбка

Код
Выбрать все
// pGlobMod - это текущий глобальник
		pNewMod = new CBLModule7(pCont, strSource); // это модуль, который будет вместо глобальника
		pNewMod->SetID("ModuleText",1);
		if(pNewMod->Compile())
		{
			pNewMod->PrepareToLoad();
			pNewMod->Load();
			pGlobMod->AssignFriendModule(pNewMod);
			pNewMod->AssignFriendModule(pGlobMod);

			HINSTANCE h7=GetModuleHandle("seven.dll");
			BYTE* adr0=(BYTE*)GetProcAddress(h7,"?GetGlobalModule@@YAPAVCBLModule7@@XZ");
			adr0++;
			DWORD old;
			VirtualProtect(adr0,4,PAGE_EXECUTE_READWRITE,&old);
			*(DWORD*)adr0=(DWORD)pNewMod;

			try
			{
				pNewMod->Execute();
			}
			catch (...)
			{
				AfxMessageBox("Критическая ошибка исполнения глобального модуля!!!", MB_OK|MB_ICONEXCLAMATION);
			}
		}
 

  

FormEx developer
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 4
ОтправитьПечать