Ahm*_*afa 1 c++ dll visual-c++ msvcr90.dll
我用VC++ 2008创建了一个DLL,当我在控制台应用程序VC++ 6.0中使用它时,有一个例外:
(msvcr90.dll):0xc0000005:访问冲突
Access Violation在这种情况下,可能意味着很多东西,msvcr90.dll参考可能会非常误导.如果将无效数据传递给任何MSVC标准库函数,则访问冲突将发生在msvcr90.dll代码内而不是代码中(查看堆栈跟踪或查看异常信息时).
也就是说,理论上,在VC++ 6中使用VC9 DLL不应该是一个问题,因为ABI没有改变,PE格式是相同的.如果msvcrt9.dll您的平台上不支持(例如,如果您在Windows NT上运行MSVC6),则可能会遇到问题,但除此之外,这意味着您需要查看代码.
我的意思是:附加调试器并查看场景下发生的事情!
还有一点需要注意:当动态使用不同版本的MSVC库时,你不能在一个库中分配数据并在另一个库中释放它,因为它们不能保证使用相同的堆,你可以Access Violation很容易地获得内存损坏(和错误)像这样.这也意味着如果您正在编写C++,则不得创建对象,然后通过返回值将其传递给调用应用程序,因为这将在幕后发生.