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

Access violation in DLL if compiled with vc++ compiler version lower than VS2015

本文关键字:编译 DLL 访问冲突 版本 vc++ 如果 VS2015 编译器      更新时间:2023-10-16

我已经尝试了几个星期了......每当我使用 plattform 工具集 VS2013 (vs120( 或更低版本编译 D3D 代理 dll时,我都会使用此库在 D3D9 应用程序中收到访问冲突 (0xC0000005(。 如果我更改为VS2015或VS2017,则不会发生异常。

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

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

顺便说一下,我使用的是Windows 8.1 Pro。

欢迎任何帮助!

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

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