[英]Access violation in DLL if compiled with vc++ compiler version lower than VS2015
我現在要嘗試解決數周的問題……每當我使用平台工具集VS2013(vs120)或更低版本編譯D3D代理dll時,使用此庫的D3D9應用程序中都會出現訪問沖突(0xC0000005)。 如果我更改為VS2015或VS2017,則不會發生異常。
我的dll僅包含DirectX 9接口IDirect3D9和IDirect3DDevice9的重新實現(用作原始代理dll)。
我想使用VS2013的原因是我的封閉源代碼D3D9應用程序已使用VS2013進行了編譯。 如果我正確理解使用不同的VS運行時通常無法正常工作,這可能也是我將所有對D3D9方法的所有調用記錄到文件中的所有嘗試導致運行時錯誤的原因。
順便說一句,我在Windows 8.1 Pro上。
歡迎任何幫助!
確保使用理想的/LD
或/LDd
(取決於是調試版本還是發行版本)或至少/MD
或/MDd
來/MDd
,以使用動態鏈接的運行時,即不要使用/MT
或/MTd
(AFAIK至少在某些情況下默認值為/MT[d]
,但我目前不確定默認的DLL設置)。
另外,根據應用程序期望的調用約定,您可以嘗試更改默認的調用約定: /Gz
(stdcall), /Gr
(fastcall), /Gd
(cdecl)。 庫通常會期望stdcall,但是MSVC中的默認值為AFAIK cdecl,因此這也可能是問題的根源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.