I refactored a native C++ static library to use boost::thread and boost::asio instead of the Windows API. This static library is referenced by a C++/CLI dll built with the /clr switch; it acts as a wrapper for the managed upper layers to use.

I use Boost inside native C++ dlls referenced by C++/CLI dlls and that works fine, but this particular scenario is a first. I suspect that Boost and C++/CLI don't play nice together, since I had to be careful to use the PIMPL idiom to avoid boost headers from being indirectly included in C++/CLI code. But now that I have to forcibly link a Boost lib with my C++/CLI dll, things have gone awry. Is this a supported usage for Boost?

My environment: Boost 1.53.0, Visual Studio Professional 2012 Version 11.0.61030.00 Update 4, Windows 7 x64.

The error is an EEFileLoadException in KernelBase.dll. It happens right after my C++/CLI dll is loaded into memory. Here's the callstack:

> KernelBase.dll!_RaiseException@16()  + 0x58 bytes
  msvcr110_clr0400.dll!__CxxThrowException@8()  + 0x3e bytes
  clrjit.dll!Compiler::impResolveToken()  + 0x3a bytes
  clrjit.dll!Compiler::impImportBlockCode()  + 0x10d5 bytes
  clrjit.dll!Compiler::impImportBlock()  + 0x55 bytes
  clrjit.dll!Compiler::impImport()  + 0x167 bytes
  clrjit.dll!Compiler::compCompile()  + 0x47 bytes
  clrjit.dll!Compiler::compCompileHelper()  + 0x1f0 bytes
  clrjit.dll!Compiler::compCompile()  + 0x104 bytes
  clrjit.dll!jitNativeCode()  - 0x11eb bytes
  clrjit.dll!CILJit::compileMethod()  + 0x25 bytes
  [External Code]
  mscoreei.dll!__CorExeMain@0()  + 0x71 bytes
  mscoree.dll!_ShellShim__CorExeMain@0()  + 0x227 bytes
  mscoree.dll!__CorExeMain_Exported@0()  + 0x8 bytes
  ntdll.dll!___RtlUserThreadStart@8()  + 0x27 bytes
  ntdll.dll!__RtlUserThreadStart@8()  + 0x1b bytes

--

Darío Eduardo Ramos
Meditech S.A. www.meditech.com.ar
(+54) 01147603300, Interno 31

Av. Julio A. Roca 3456

Florida Oeste, Bs.As. Argentina