Я так понял компилятор не приспособлен компилить длл с точкой входа при её загрузки допустим пользовательской DllMain()
Соответственно код что относится к длл перенесётся на реализацию в программе?
пример дллки
Procedure debug_ohibka(s$) Protected *Bufer *Bufer=AllocateMemory(200) FormatMessage_(#FORMAT_MESSAGE_FROM_SYSTEM,0, GetLastError_(), #LANG_NEUTRAL, *Bufer, 200,0) MessageRequester("Событие "+s$,Str(GetLastError_())+" "+PeekS(*Bufer,-1,#PB_Unicode)) FreeMemory(*Bufer) EndProcedure ProcedureDLL.i DllEntryPoint(hinstDLL,fdwReason,*lpReserved) debug_ohibka("DllEntryPoint "+Str(hinstDLL)+"===*fdwReason==="+Str(fdwReason)) EndProcedure ProcedureDLL.i DllMain(hinstDLL,fdwReason,*lpReserved) debug_ohibka("DllMain "+Str(hinstDLL)+"===*fdwReason==="+Str(fdwReason)) Select fdwReason Case #DLL_PROCESS_ATTACH;при загрузке DLL в поток, инициировавший её загрузку debug_ohibka("DllMain #DLL_PROCESS_ATTACH "+Str(hinstDLL)+"===*fdwReason==="+Str(fdwReason)) Case #DLL_THREAD_ATTACH;при создании нового потока в процессе, владеющем DLL debug_ohibka("DllMain #DLL_THREAD_ATTACH "+Str(hinstDLL)+"===*fdwReason==="+Str(fdwReason)) Case #DLL_THREAD_DETACH;при завершении не последнего потока в процессе debug_ohibka("DllMain #DLL_THREAD_DETACH "+Str(hinstDLL)+"===*fdwReason==="+Str(fdwReason)) Case #DLL_PROCESS_DETACH;при завершении не последнего потока в процессе при завершении последнего потока в "жизни DLL debug_ohibka("DllMain #DLL_PROCESS_DETACH "+Str(hinstDLL)+"===*fdwReason==="+Str(fdwReason)) EndSelect EndProcedure
и её загрузки
#DONT_RESOLVE_DLL_REFERENCES=$00000001 #LOAD_IGNORE_CODE_AUTHZ_LEVEL=$00000010 #LOAD_LIBRARY_AS_DATAFILE=$00000002 #LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE=$00000040 #LOAD_LIBRARY_AS_IMAGE_RESOURCE=$00000020 #LOAD_LIBRARY_SEARCH_APPLICATION_DIR=$00000200 #LOAD_LIBRARY_SEARCH_DEFAULT_DIRS=$00001000 #LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR=$00000100 #LOAD_LIBRARY_SEARCH_SYSTEM32=$00000800 #LOAD_LIBRARY_SEARCH_USER_DIRS=$00000400 #LOAD_WITH_ALTERED_SEARCH_PATH=$00000008 #LOAD_LIBRARY_REQUIRE_SIGNED_TARGET=$00000080 #LOAD_LIBRARY_SAFE_CURRENT_DIRS=$00002000 deskriptor.i = LoadLibraryEx_("~tests_dll.dll",0,#LOAD_IGNORE_CODE_AUTHZ_LEVEL) Debug deskriptor FreeLibrary_(deskriptor)
показывет что по точкам входа не работает!
ps: инфа
Ссылка
Отредактировано Sergeihik (16.10.2022 16:39:19)