title: LoadLibrary fails; GetLastError no help
body: <p>I have a project that I converted from Visual Studio 2003 .NET  to Visual Studio 2010.  It's NOT a .NET project; it's Visual C++ (unmanaged).</p>
  
  <p>The DLL pulls in additional DLLs.  If I link an executable with this DLL, then the executable dies during the initialization of the DLL.  (I can tell, there are constructors for static objects that are being called, and I can see their operation.)  I've removed ALL VS 2010-created DLLs from my path, except for one of them, which causes the error.  Replacing that one with the VS.NET-created version allows the program to run.</p>
  
  <p>Since I'm not getting any useful information, I decided to write a test application that doesn't directly link to the DLL, but instead uses LoadLibrary to load the library.  The idea was that I could use GetLastError() to help figure the issue with the library.  No go; I get an error code -529697949, which isn't a Windows error code at all!  (If I change the DLL to the VS.NET-created version, the program loads the DLL properly.)</p>
  
  <p>I used the Dependency Walker (www.dependencywalker.com) to check the DLL, and it tells me that "At least one delay-load dependency module was not found," highlighting IESHIMS.DLL and WER.DLL.  I am seeing no other error with that tool.  Running it on the VS.NET-created DLL shows the same two warnings, so I figure this is a red herring.</p>
  
  <pre><code>static void showMessage(const wchar_t *wmsg)
  {
          std::wcout &lt;&lt; wmsg &lt;&lt; std::endl;
          ::MessageBox(NULL, wmsg, TEXT("Message"), MB_OK);
  }
  
  static void testLoadLibrary(const wchar_t *lib)
  {
          ::SetLastError(0L);
          ::SetErrorMode(0);
  
          std::wstringstream wss;
  
          wss &lt;&lt; "LoadLibrary: " &lt;&lt; lib;
          showMessage(wss.str().c_str());
          HINSTANCE LoadME = ::AfxLoadLibrary(lib);
          if (LoadME == NULL) {
                  DWORD dw = ::GetLastError();
                  wss &lt;&lt; "Failed: Error code " &lt;&lt; dw;
                  showMessage(wss.str().c_str());
                  ErrorExit(lib, dw);
          } else {
                  wss &lt;&lt; "LoadLibrary of " &lt;&lt; lib &lt;&lt; " succeeded.";
                  showMessage(wss.str().c_str());
                  ::FreeLibrary(LoadME);
          }
  }
  </code></pre>
  
  <p>Finally, I ran Process Monitor (sysinternals.com) to monitor the test program, looking at all entries with Path containing the string "dll."  I don't see anything particularly informative in this list--no idea why the DLL is failing to load.</p>
  
  <p>If I use LoadLibraryEx with DONT_RESOLVE_DLL_REFERENCES, the library loads, so this really looks like a dependency issue, which is why I'm surprised that the dependency walker isn't being particularly helpful.</p>
  
  <p>I've tried this on Windows 2008 R2 and Windows 2003; same behavior.</p>
  
  <p>Any suggestions?</p>