1

I'm compiling the program using VS2013 using the v120_xp toolset. The program runs perfectly fine on Windows 7 however as soon as I try and run the program on a machine running XP SP3 I get the error.

I'm compiling vs3_0 and I have tried running this on machines with Radeon HD 3600 and 4600, both of which support up to shader model 4_0.

I've found that when updating the DirectX runtimes on the target machine this error goes away, however that fix can't be used for my scenario, yes I understand Windows XP is not supported anymore however the company I work for has a lot of terminals on live estates running Windows XP, so for them updating isn't an option.

I have run dependency walker and profiled my program and have got an interesting list of errors all to do with MSVCR120D.dll, so is this possibly a C runtime error ? Here are the dependency walker logs:

GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsAlloc") called from "MSVCR120D.DLL" at address    0x00BEEAD1 and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsFree") called from "MSVCR120D.DLL" at address 0x00BEEAF4 and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsGetValue") called from "MSVCR120D.DLL" at address 0x00BEEB17 and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsSetValue") called from "MSVCR120D.DLL" at address 0x00BEEB39 and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "InitializeCriticalSectionEx") called from "MSVCR120D.DLL" at address 0x00BEEB5C and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "CreateEventExW") called from "MSVCR120D.DLL" at address 0x00BEEB7F and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "CreateSemaphoreExW") called from "MSVCR120D.DLL" at   address 0x00BEEBA2 and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "SetThreadStackGuarantee") called from "MSVCR120D.DLL" at address 0x00BEEBC5 and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "CreateThreadpoolTimer") called from "MSVCR120D.DLL" at address 0x00BEEBE8 and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "SetThreadpoolTimer") called from "MSVCR120D.DLL" at address 0x00BEEC0B and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "WaitForThreadpoolTimerCallbacks") called from "MSVCR120D.DLL" at address 0x00BEEC2E and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "CloseThreadpoolTimer") called from "MSVCR120D.DLL" at address 0x00BEEC51 and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "CreateThreadpoolWait") called from "MSVCR120D.DLL" at address 0x00BEEC74 and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "SetThreadpoolWait") called from "MSVCR120D.DLL" at address 0x00BEEC97 and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "CloseThreadpoolWait") called from "MSVCR120D.DLL" at address 0x00BEECBA and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlushProcessWriteBuffers") called from "MSVCR120D.DLL" at address 0x00BEECDD and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "FreeLibraryWhenCallbackReturns") called from  "MSVCR120D.DLL" at address 0x00BEED00 and returned NULL. Error: The specified procedure could not be  found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "GetCurrentProcessorNumber") called from "MSVCR120D.DLL" at address 0x00BEED23 and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "GetLogicalProcessorInformation") called from "MSVCR120D.DLL" at address 0x00BEED46 and returned 0x7C8623D7.
GetProcAddress(0x7C800000 [KERNEL32.DLL], "CreateSymbolicLinkW") called from "MSVCR120D.DLL" at address 0x00BEED69 and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "SetDefaultDllDirectories") called from "MSVCR120D.DLL" at address 0x00BEED8C and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "EnumSystemLocalesEx") called from "MSVCR120D.DLL" at address 0x00BEEDAF and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "CompareStringEx") called from "MSVCR120D.DLL" at address 0x00BEEDD2 and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "GetDateFormatEx") called from "MSVCR120D.DLL" at address 0x00BEEDF5 and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "GetLocaleInfoEx") called from "MSVCR120D.DLL" at address 0x00BEEE18 and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "GetTimeFormatEx") called from "MSVCR120D.DLL" at address 0x00BEEE3B and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "GetUserDefaultLocaleName") called from "MSVCR120D.DLL" at address 0x00BEEE5E and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "IsValidLocaleName") called from "MSVCR120D.DLL" at address 0x00BEEE81 and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "LCMapStringEx") called from "MSVCR120D.DLL" at address 0x00BEEEA4 and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "GetCurrentPackageId") called from "MSVCR120D.DLL" at address 0x00BEEEC7 and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "GetTickCount64") called from "MSVCR120D.DLL" at address 0x00BEEEEA and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "GetFileInformationByHandleExW") called from "MSVCR120D.DLL" at address 0x00BEEF0D and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x7C800000 [KERNEL32.DLL], "SetFileInformationByHandleW") called from "MSVCR120D.DLL" at address 0x00BEEF30 and returned NULL. Error: The specified procedure could not be found (127).

I would massively appreciate any help on this, cheers.

abcthomas
  • 131
  • 7
  • I think after some searching that the missing functions in kernel should be fine as my software isn't expecting to be using any of these, not 100% sure though – abcthomas Nov 25 '14 at 16:32
  • ``D3DXCompileShader`` is in the ``D3DX9_*.DLL`` module which must be deployed using the legacy DirectX End-User Runtime (aka DirectSetup, DXSETUP, or DXWSETUP). You can't avoid that requirement as no version of ``D3DX`` is built into Windows. Can you use built-time rather than run-time compilation? – Chuck Walbourn Nov 25 '14 at 16:35
  • Note all those ``GetProcAddress`` errors are expected. They are the MSVC C++ runtime trying to probe for functions it would prefer to use over legacy APIs. – Chuck Walbourn Nov 25 '14 at 16:37
  • These legacy systems are running Windows XP Service Pack 2 or 3 at least, yes? – Chuck Walbourn Nov 25 '14 at 16:40
  • No, this is entirely normal. And the basic reason that the CRT uses GetProcAddress() instead of binding to the exported function directly. You deal with this the only way you can ever get lazy IT staff to make a move, you make it *their* problem. State your install requirements explicitly. – Hans Passant Nov 25 '14 at 16:41
  • I distribute the d3dx9_43.dll with the package. So other than updating the runtimes on the target machine there is no other fix ? – abcthomas Nov 25 '14 at 16:55

0 Answers0