TdzResourceDllLoader.GetEntryPoint in u_dzResourceDllLoader looks up entry points in the export table itself, and that code only works in 32 bit programs. Measured with Delphi 12, using the image of kernel32.dll that is already mapped into the process as the DLL handle: as Win32, GetProcAddressEx('GetTickCount') returns the same address as GetProcAddress; as Win64 it does not find GetTickCount at all.
Reasons visible in the code:
DWORD and Integer casts (DWORD(DosHeader), Integer(pFirstExportName), ...), which drop the upper 32 bits of a 64 bit pointer. On Win64 system DLLs are normally mapped above 4 GB.SizeOf(Pointer), which is 8 on Win64.Not measured: LoadDll and UnloadDll use DWORD/Cardinal casts for the relocations and the DllMain call in the same way, so loading a DLL from a resource very likely does not work in a 64 bit program either.
Found while working on [bugs:#55].
Fixed in revision #2425