| 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…
 |  |