Я так понял компилятор не приспособлен компилить длл с точкой входа при её загрузки допустим пользовательской 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)