Я работаю над отладкой устаревшего приложения Visual Basic 6.0;приложение было встроено в нативный код, но, к сожалению, у нас есть только двоичные файлы, но нет исходного кода.Поэтому я довольно ограничен в том, что касается изменений в программе.
Моя конечная цель - получить значение свойства «Имя» некоторых элементов управления с учетом их HWND.Я могу легко написать код VisualBasic для этого, но, к сожалению, я не вижу, как выполнить этот код в контексте работающего приложения.
Моя первая попытка состояла в создании ActiveX DLL в VisualBasic, которая выставляет мойФункция 'controlNameForHWND'.Во время выполнения, я тогда имел небольшую утилиту, вставляющую вторую вспомогательную DLL в запущенный процесс VB, и эта вспомогательная DLL затем вызывала CoCreateInstance , чтобы мой элемент управления ActiveX (который содержит функцию 'controlNameForHWND', которую я написал в VB)) создается внутри процесса приложения.
Это сработало хорошо, но, к сожалению, элемент управления ActiveX, очевидно, не выполняется в том же контексте, что и приложение, подлежащее отладке.Например, глобальное значение App.hInstance
отличается, массив, возвращаемый глобальным Forms
массивом, всегда пуст, и так далее.Так что весь мой код скрипта VisualBasic работает в параллельной вселенной.Невезение.: - /
У кого-нибудь еще есть идеи, как можно «внедрить» код VisualBasic в процесс VB6?Просмотр процесса с использованием Process Explorer показывает, что библиотека MSVBVM60.DLL
загружена (виртуальная машина Microsoft Visual Basic), но не, например, VBA.DLL
.Последнее было бы интересно, поскольку оно экспортирует недокументированную функцию EbExecuteLine
для выполнения операторов скрипта.
У меня немного мало идей, поэтому я благодарен и за самые безумные идеи.: -)