Gemini
Если ты обработку делал точно так, как показал, я очень сомневаюсь что калк падал из-за этого.
У меня появились подозрения в том, что в контексте калка инициализация рантайма происходит как-то некорректно.
Я понял как создавать tbl но вот несколько вопросов:
1. Создавать нужно что Standard Dll или ActiveX Dll (а уже потом из них получать tbl.)
Видать не понял. T
LB (а не TBL) надо делать не с помощью VB, а с помощью MIDL-а. Или любых других компиляторов IDL-языков.
2. У меня не получаеться Обьявить(пробовал обьявлять в модуле и в классе) API-функций так чтобы они стали доступны в проекте (к которому подключили tbl)
Доступны в смысле не так :mytbl.FindWindow.
А просто когда я к функции обращаюсь mYWND=FindWindow(A,B)
VB не ругался что функция не определена.
См. пункт 1.
TLB нужна для того, чтобы не использовать Declare Function. Даже если предположить, что в VB было бы можно создавать TLB, как бы ты их (API-функции) там объявлял?
Ещё один вариант tbl, как мне кажеться то что ниже это бред...
// решил сделать так: Обьявил в классе API
Создал функцию подобную API...
Public Function myFindWindow(Byval ClassName as String, Byval wCaption as String) as long
myFindWindow=FindWindow(ClassName,wCaption)
end function
а) См. пункт 1
б) Это действительно бред. Это библа-переходник к Declare Function.
Код так-то работает но вылетая кальк ругаеться уже на vbhook.dll а не на Msvbvm60.dll.
Что значит "ругается на библу"? Ты имеешь ввиду регион, в котором выброшено необработанное исключение? С этого и надо было начинать. Опять же, десять раз уже говорил - отладчик тебе в руки. Чем гадать, что там не так работае.
кальк вылетел...
Опять же, отладчик в руки. Потому что скорее всего опять переполнение стека.
Но так же это действие работает с меню! Т.е. Если я вызову меню и у меня стоит запрет на дестрой то меню не закроеться и кальк продолжит работать...
Что же ты хотел? По твоему меню -- не окно? В этой ОС всё - окна. Потому-то она так и называется.
Вот я и думаю почему я не могу исполнить какой либо код после отлавливания сообщения (например: ShowWindow(hwnd,0) ) ????
Наверное потому, что какое-то действие, совершаемое функцией ShowWindow, инициирует вызов твоего ХукПрок-а, который опять вызывает эту функцию, которая опять совершает какое-то действие, которое инициирует вызов твоего ХукПрок-а, который опять вызывает эту функцию, которая опять совершает какое-то дейсвтие, которое инициирует вызов твоего ХукПрок-а, который опять ...
И так до тех пор, пока не кончится 1 МБ стека.
Хук снимается, когда хук прок вызывается, и устанавливается, после возврата из ХукПрок? Если да, то причина в другом.