我用 VC++ 2008 制作了一个 DLL,当我在控制台应用程序 VC++ 6.0 中使用它时,出现异常:
(msvcr90.dll): 0xc0000005: Access Violation
最佳答案
Access Violation
在这种情况下可能意味着很多事情,而 msvcr90.dll
引用可能具有很大的误导性。如果您将无效数据传递给任何 MSVC 标准库函数,访问冲突将发生在 msvcr90.dll
中,而不是在您的代码中(查看堆栈跟踪或查看异常信息时)。
也就是说,理论上,在 VC++ 6 中使用 VC9 DLL 应该不会有问题,因为 ABI 没有改变并且 PE 格式是相同的。如果 msvcrt9.dll
在您的平台上不受支持(例如,如果您在 Windows NT 上运行 MSVC6),您可能会遇到问题,否则这意味着您需要检查您的代码。
我的意思是:附加一个调试器,看看幕后发生了什么!
还有一点要注意:当动态使用不同版本的 MSVC 库时,您不得在一个库中分配数据并在另一个库中释放它,因为不能保证它们使用相同的堆并且您可能会出现内存损坏(和 Access Violation
错误)像这样很容易。这也意味着,如果您正在编写 C++,则不得创建一个对象,然后通过返回值将其传递给调用应用程序,因为这将在幕后发生。
关于c++ - 我可以用 VC++ 2008 创建 Dll 并在 VC++ 6 中使用它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9979859/