C++ std::string异常以及如何查找已编译c++;应用

C++ std::string异常以及如何查找已编译c++;应用,c++,access-violation,stdstring,C++,Access Violation,Stdstring,我们有一个dll(由我们公司开发,我们有源代码),它由另一个应用程序托管和加载(我们没有源代码),最近我们有很多访问冲突异常,因为std字符串: 76FAE228:000196 [76FAE3BE] RtlInitializeGenericTable (ntdll.dll) 76FADFA5:00007E [76FAE023] RtlGetCompressionWorkSpaceSize (ntdll.dll) 749714C9:000014 [749714DD] HeapLock (kerne

我们有一个dll(由我们公司开发,我们有源代码),它由另一个应用程序托管和加载(我们没有源代码),最近我们有很多访问冲突异常,因为std字符串:

76FAE228:000196 [76FAE3BE] RtlInitializeGenericTable (ntdll.dll)
76FADFA5:00007E [76FAE023] RtlGetCompressionWorkSpaceSize (ntdll.dll)
749714C9:000014 [749714DD] HeapLock (kernel32.dll)
730B3B4E:0000CD [730B3C1B] free (msvcr90.dll)
736A5DFB:000035 [736A5E30] ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAEX_NI@Z (msvcp90.dll) 
736A5EBB:000009 [736A5EC4] ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ (msvcp90.dll)
如您所见,我们使用多线程DLL(/MD)作为运行库,并使用平台工具集v90

我们怀疑托管应用程序将平台工具集更改为新版本,是什么导致了此问题,问题是我找不到托管应用程序的平台工具集(它们使用多线程(/MT)作为运行库)Process Walker也没有帮助

如果托管应用程序正在使用/MT,我如何找到该应用程序的平台工具集

多谢…

多种解决方案(从最差到最好的顺序): 1) 如果dll附带头文件,请添加一个全局内联init函数,用于检查 如果定义了_MT和_DLL(请参阅)

2) 您可以使用EnumProcessModule()遍历程序中加载的DLL 并检查是否加载了msvcrtxxx.dll。但是要小心,在执行ccheck时,msvcrtxxx.dll可能尚未加载

3) 将dll导出方法设计为无crt 例如不通过值传递类(std::string)实例,crt对象(file..等);
如果您提供了一种分配/销毁实例的方法,那么指向类的指针就可以了

我们发现托管应用程序的运行库版本是v110_xp,我们现在正在用相同的版本编译我们的dll,希望它能解决这个问题,谢谢。