如果使用低于VS2015的vc ++编译器版本编译,则DLL中的访问冲突

时间:2017-07-18 14:32:05

标签: c++ visual-studio visual-studio-2013

我现在试图解决这个问题几周...每当我使用平台工具集VS2013(vs120)或更低版本编译我的D3D代理dll时,我使用此库在D3D9应用程序中获得访问冲突(0xC0000005)。 如果我更改为VS2015或VS2017,则不会发生异常。

我的dll只包含重新实现的DirectX 9接口IDirect3D9和IDirect3DDevice9(作为原始代理dll)。

我想使用VS2013的原因是我的闭源D3D9应用程序是使用VS2013编译的。如果我理解正确使用不同的VS运行时通常不能正常工作,这可能也是我将所有对D3D9方法的所有调用都记录到文件的尝试导致运行时错误的原因。

顺便说一下,我在Windows 8.1 Pro上。

欢迎任何帮助!

1 个答案:

答案 0 :(得分:0)

确保您的DLL使用理想的/LD/LDd(取决于它是调试还是发布版本)或至少/MD/MDd进行编译,以便使用动态链接的运行时,即不使用/MT/MTd构建(至少在某些情况下,AFAIK的默认值为/MT[d],但我目前还不确定默认的DLL设置)。

此外,根据应用程序所期望的调用约定,您可以尝试更改默认调用约定:/Gz(stdcall),/Gr(fastcall),/Gd( CDECL)。通常stdcall是库所期望的,但MSVC中的默认值是AFAIK cdecl,因此这也可能是问题的根源。