I've a number of rather old in-proc ATL COM servers, formerly built using VC++ 2005.
Now these projects were ported to VC++ 2015.
Since I need to support legacy Win XP systems, platform toolset is "VS 2015 - Windows XP". Also, according to this issue, /Zc:threadSafeInit-
compiler option is set.
All of servers are written using ATL attributes, there are something like this in each project:
[module(dll, uuid = "{E49F47F5-C0E2-4C1D-8C66-BF8AE6DDF5A1}",
name = "MyLib",
helpstring = "MyLib 1.0 Type Library",
resource_name = "IDR_MYLIB")]
class CMyLibModule
{
public:
// Override CAtlDllModuleT members
};
The problem.
All these projects runs fine on WinXP Pro. But when I try to register them on XP Embedded machine, I get 0xC000001D error code on LoadLibrary
call.
How can I fix/diagnose this error?
P.S. If this makes sense, XP embedded system is built on top AMD Geode processor, while XP Pro system is on top of regular Intel processor.
I've figured out, what's the problem.
The issue is in combination of Geode processor and instruction set used by VC++ compiler by default - SSE2 for x86 projects. This works on modern and/or "mature" processors, but fails on Geode.
After changing this option to SSE, everything works fine: