我现在试图解决这个问题几周...每当我使用平台工具集VS2013(vs120)或更低版本编译我的D3D代理dll时,我使用此库在D3D9应用程序中获得访问冲突(0xC0000005)。 如果我更改为VS2015或VS2017,则不会发生异常。
我的dll只包含重新实现的DirectX 9接口IDirect3D9和IDirect3DDevice9(作为原始代理dll)。
我想使用VS2013的原因是我的闭源D3D9应用程序是使用VS2013编译的。如果我理解正确使用不同的VS运行时通常不能正常工作,这可能也是我将所有对D3D9方法的所有调用都记录到文件的尝试导致运行时错误的原因。
顺便说一下,我在Windows 8.1 Pro上。
欢迎任何帮助!
答案 0 :(得分:0)
确保您的DLL使用理想的/LD
或/LDd
(取决于它是调试还是发布版本)或至少/MD
或/MDd
进行编译,以便使用动态链接的运行时,即不使用/MT
或/MTd
构建(至少在某些情况下,AFAIK的默认值为/MT[d]
,但我目前还不确定默认的DLL设置)。
此外,根据应用程序所期望的调用约定,您可以尝试更改默认调用约定:/Gz
(stdcall),/Gr
(fastcall),/Gd
( CDECL)。通常stdcall是库所期望的,但MSVC中的默认值是AFAIK cdecl,因此这也可能是问题的根源。