如果使用低于 VS2015 的 vc++ 编译器版本编译,则 DLL 中的访问冲突
Access violation in DLL if compiled with vc++ compiler version lower than VS2015
我已经尝试了几个星期了......每当我使用 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,因此这也可能是问题的根源。
相关文章:
- 在使用 Clang 编译 DLL 时指定 DEF 文件
- 如何使用导出的函数交叉编译 DLL
- 从DLL导出函数,LoadLibrary()需要用TEXT转换的字符串才能编译而不会出错
- 为什么我可以在EXE上编译DLL
- 在 Windows 10 上使用 CZMQ 编译 dll 时出错
- 使用签证编译 dll / exe - 链接失败
- 奇异的未解决的外部编译DLL
- 使用 ATL 编译 dll,并将方法参数作为接口,但将它们作为 coclass 获取
- 调用 CUDA 编译.dll从 R - .C 与 .叫
- 如何在编译DLL时添加includes
- 使用VS编译器在Qt中编译dll,以便在Borland中使用
- 在Microsoft Visual c++ 2015中编译DLL -警告C4251需要有DLL接口供类的客户端使用-当使
- 编译DLL中指定的接口
- 替换反编译DLL中的函数
- MS Visual C c++编译DLL供Delphi使用
- 编译DLL注入器时生成失败
- 在msvc++ 2010中,在调试配置中用静态链接编译DLL时,链接器错误
- 我可以不使用Visual Studio编译dll吗?
- 在 c 中编译 dll 时传递参数
- 用英特尔编译器编译DLL时出错