簡體   English   中英

如果使用低於VS2015的vc ++編譯器版本進行編譯,則DLL中的訪問沖突

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM