MVV

|
Posted: Tue Jun 15, 2010 16:39 Post subject: |
|
|
Надеюсь, успею запостить, пока форум в очередной раз за сегодня не сдохнет...
LoadLibrary и вызов функции, а также выгрузка DLL (сразу или при выгрузке плагина) работают нормально.
А вот с Autorun_PluginInit какой-то косяк - вызывается она явно не как __stdcall, также я пробовал __fastcall и __cdecl, ни при одном из них я не нахожу в стеке этих параметров на нужном месте. Ерунда какая-то. Кстати, какой размер буфера - чему равна MaxListSize (может, хоть ее найду)?
Корректные прототипы функций:
Code: | void __stdcall Autorun_PluginInit(const AutorunInfo* Info, char* FuncList, int MaxListSize);
int __stdcall Autorun_ExecFunc(const char* FuncName, const char** Param, int ParamCount); |
(тип вызова указывается после типа возвращаемого значения, и с двумя символами подчеркивания)
И вопрос - что такое HModule nProcID? В Си нет такого типа, но есть тип HMODULE (регистр в Си важен). Но я вообще не въеду, что с этим хэндлом можно делать. Зачем он? Идентификаторы процесса и потока можно получить прямо из DLL, хэндл модуля загруженной библиотеки ей передается в DllMain, дескриптор окна ТК передается плагином (кстати, ты окно ищешь с учетом его принадлежности текущему процессу? ). Не представляю, какие еще могут понадобиться дескрипторы для работы. А если и могут, то DLL их по идее может получить так же точно, как и твой плагин.
Также плохо понятно (хотя смотрится интересно), зачем добавлять функции из DLL в список. Их потом можно прямо из конфига запускать? Потестить фичу по вышеизложенным причинам не удалось. В любом случае, Autorun-скрипт выполняется при запуске ТК, то есть, крайне малое время, так что смысл в возможности вызывать функции по именам видится слабо. Кстати, любую DLL можно загружать любое число раз - при этом система сама поймет, что DLL уже загружена, и просто передаст ей управление (вызовет DllMain с параметром DLL_THREAD_ATTACH) - я к тому, что можно написать LoadLibrary MyDll.dll MyFunc несколько раз - и DLL будет по-настоящему загружена лишь раз, а функция будет вызвана нужное число раз. _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|