Мне нужно вызвать функцию сокласса, прочитав ее адрес из vtable методов интерфейса COM. Мне нужен общий способ чтения адресов.
Теперь мне нужно вызвать функцию, у которой будут конкретные адресные (НЕ ИЗВЕСТНЫЕ) аргументы (параметры), которые я собрал из TLB, а также имя. Как этот адрес соответствует имени той функции, которую я собираюсь вызвать.
Для этого мне нужно пройти по vtable, которая содержит функциональные адреса, НАСТОЯЩИМ необходимо сопоставить адрес функции с ИМЯ этой функции. Это я не знаю. Как? Более одной функции с тем же именем может появиться в vtable (случай перегрузки). В этом случае нам нужно различать имена функций и их адреса. Как справиться? С уважением Усмань
С уважением, сэр !!
Я разрабатываю структуру модульного тестирования, для которой мне нужно вытащить все сигнатуры функций определенных COM Exe или COM DLL для отображения в сетке или другом интерфейсе для пользователя, чтобы позже, выбрав определенную сигнатуру функции из этого списка, он / она может выполнить эту функцию после предоставления аргументов (данных в качестве параметров) этой функции. Все это будет происходить динамически во время выполнения, во время выполнения функция будет вызываться как угодно пользователю.
Этого можно добиться разными способами.
Предоставляя TLB (библиотеки типов), мы можем извлекать каждую сигнатуру функции и отображать каждую сигнатуру для элемента управления Grid или элемента управления Tree. Второй шаг - вызвать эти функции во время выполнения, предоставив данные. Для вызова требуются данные и адрес функций (или имена). У меня была бы панель или элемент управления с графическим интерфейсом, который будет принимать данные от пользователя, и эти данные затем станут аргументами.
Теперь возникает настоящая проблема, о которой я писал ранее. Вызов функций / методов этого интерфейса, предоставляемых компонентом COM, реализованным совместным классом. Это требует отслеживания vtable интерфейса, предоставляемого компонентом, нахождения адреса этой функции, а затем необходимо знать, ДЕЙСТВИТЕЛЬНО ЛИ ЭТО АДРЕС, НА КОТОРОЙ Я СОБИРАЮСЬ ВЫЗВАТЬ В КАЧЕСТВЕ ФУНКЦИИ? Таким образом, для этого необходимо преобразовать этот адрес в имя функции, а затем сравнить какое-то сравнение строк, чтобы решить, действительно ли это имя функции, которое ПОЛЬЗОВАТЕЛЬ НАЖИЛ из Tree Control, показывая подписи.
Предложения или рекомендации?