我已经想了好几个星期了.每当我使用plattform toolset VS2013 (vs120)或更低版本编译我的D3D代理dll时,我在使用这个库的D3D9应用程序中得到一个访问冲突(0xC0000005)。如果我更改为VS2015或VS2017,则不会发生异常。
我的dll只包含DirectX 9接口IDirect3D9和IDirect3DDevice9的重新实现(作为原始代理dll工作)。
我想使用VS2013的原因是我的封闭源代码D3D9应用程序是使用VS2013编译的。如果我理解正确的话,使用不同的VS运行时通常不能正常工作,这可能也是我所有尝试将对D3D9方法的所有调用记录到一个文件中导致运行时错误的原因。
顺便说一下,我用的是Windows 8.1 Pro。
欢迎任何帮助!
发布于 2017-07-18 23:11:08
确保您的动态链接库是使用理想的/LD或/LDd (取决于它是调试版本还是发行版)或至少是/MD或/MDd编译的,以使用动态链接的运行时,即不要使用/MT或/MTd (AFAIK至少在某些情况下默认设置为/MT[d],但我目前不确定默认的动态链接库设置)。
此外,根据应用程序期望的调用约定,您可以尝试更改默认的调用约定:/Gz (标准调用)、/Gr (快速调用)、/Gd (cdecl)。库通常需要stdcall,但MSVC中的默认值是AFAIK cdecl,因此这也可能是问题的来源。
https://stackoverflow.com/questions/45169782
复制相似问题