Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Autorun 
Author Message
MVV



PostPosted: Tue Jun 15, 2010 16:39    Post subject: Reply with quote

Надеюсь, успею запостить, пока форум в очередной раз за сегодня не сдохнет... Smile

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, дескриптор окна ТК передается плагином (кстати, ты окно ищешь с учетом его принадлежности текущему процессу? Smile). Не представляю, какие еще могут понадобиться дескрипторы для работы. А если и могут, то DLL их по идее может получить так же точно, как и твой плагин.

Также плохо понятно (хотя смотрится интересно), зачем добавлять функции из DLL в список. Их потом можно прямо из конфига запускать? Потестить фичу по вышеизложенным причинам не удалось. В любом случае, Autorun-скрипт выполняется при запуске ТК, то есть, крайне малое время, так что смысл в возможности вызывать функции по именам видится слабо. Кстати, любую DLL можно загружать любое число раз - при этом система сама поймет, что DLL уже загружена, и просто передаст ей управление (вызовет DllMain с параметром DLL_THREAD_ATTACH) - я к тому, что можно написать LoadLibrary MyDll.dll MyFunc несколько раз - и DLL будет по-настоящему загружена лишь раз, а функция будет вызвана нужное число раз.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
View user's profile Send private message ICQ Number


Powered by phpBB © 2001, 2005 phpBB Group