我用VC ++ 2008创建了一个DLL,当我在控制台应用程序VC ++ 6.0中使用它时,有一个例外:
(msvcr90.dll):0xc0000005:访问冲突
答案 0 :(得分:5)
Access Violation
可能意味着很多事情,msvcr90.dll
引用可能会产生很大误导。如果将无效数据传递给任何MSVC标准库函数,则访问冲突将发生在msvcr90.dll
内而不是代码中(查看堆栈跟踪或查看异常信息时。
也就是说,理论上,在VC ++ 6中使用VC9 DLL时不应该存在问题,因为ABI没有改变且PE格式相同。如果您的平台上不支持msvcrt9.dll
,则可能会出现问题(例如,如果您在Windows NT上运行MSVC6),否则就意味着您需要查看代码。
我的意思是:附加调试器并查看场景下发生的事情!
还有一点需要注意:当动态使用不同版本的MSVC库时,您不能在一个库中分配数据并将其释放到另一个库中,因为它们不能保证使用相同的堆并且您可能会损坏内存(并且{ {1}}错误)很容易这样。这也意味着如果您正在编写C ++,则不得创建对象,然后通过返回值将其传递给调用应用程序,因为这将在幕后发生。
答案 1 :(得分:3)
如果要使用Visual C ++版本 X 构建DLL并在Visual C ++版本 Y 中使用它,您有一些选择: