>> Самый красивый и универсальный способ, имхо, это — переопределить
>> OLE-хук RTL Клариона:
>> Wsl$OleTermHook
VY> Похоже, это то что надо. А как его переопределить, научи, плиз?
Глобальная секция программы
MAP OleTermHookProc(),TYPE MyProcOfEndThread() CallOleTermHook(OleTermHookProc _OrigProc),NAME('CallOleTermHook') MODULE('') CallHookByAddr(LONG _HookAddr),NAME('CallOleTermHook') END END GLO:SaveOleTermHook LONG OleTermHook LONG,EXTERNAL,DLL(dll_mode),NAME('Wsl$OleTermHook')
в начале программы
GLO:SaveOleTermHook = OleTermHook OleTermHook = Address(MyProcOfEndThread)
в любом модуле
MyProcOfEndThread PROCEDURE CODE PutIni('THREADS',Thread(),'Завершил работу в '&Format(Clock(),@t4)) if GLO:SaveOleTermHook then CallHookByAddr(GLO:SaveOleTermHook). RETURN CallOleTermHook PROCEDURE(OleTermHookProc _OrigProc) CODE RETURN(_OrigProc())
VY> Мне нужно при любом типе сборки, и standalone и local.
Метка Wsl$OleTermHook доступна в обоих режимах сборки.
Правильным отображением адреса управляет аттрибут DLL(dll_mode).
Кстати, самому стало интересно — что я тебе советую:))
Написал простенький тест — работает прекрасно!
Естественно, отслеживает завершение потока, запущенного
через Start. Завершение главного потока программы не отслеживает.
Как и предполагал, правильно отрабатывает определение номера
завершаемого трейда.
VY> Один способ вклинить свою функцию в RTL я знаю: это подложить
VY> при линковке импортную CxxRUNX.LIB, предварительно
VY> подготовив ее в libmaker и убрав из нее нужную функцию. Ну а
VY> вызов оригинальной функции обеспечить вызовом по адресу из
VY> RTL DLL. Но такой способ можно реализовать только в standalone сборке.
VY> Кстати, интересно, есть ли возможность такой финт проделать в
VY> local? Но это уже второй вопрос 🙂
OP.EXE (кажеться от Кондурушкина (сорри, если невольно исковеркал
фамилию автора!)) — OBJ-модули — деассемблер нужного модуля —
вырезка из него меняемой процедуры и вставка туда своей —
компиляция нового OBJ-модуля — сборка всех OBJ-модулей в новую
библиотеку Кларионовским линкером.
Правда — не пробовал!
Струменский, кажеться, что-то подобное уже делал.
Или он делает небольшие правки только HEX-редакторе?