Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我可以用VC++;2008,并在VC++;6._C++_Visual C++_Dll_Msvcr90.dll - Fatal编程技术网

C++ 我可以用VC++;2008,并在VC++;6.

C++ 我可以用VC++;2008,并在VC++;6.,c++,visual-c++,dll,msvcr90.dll,C++,Visual C++,Dll,Msvcr90.dll,我用VC++2008创建了一个DLL,当我在控制台应用程序VC++6.0中使用它时,出现了一个异常: (msvcr90.dll):0xc0000005:访问冲突 在这种情况下,访问冲突可能意味着很多事情,而msvcr90.dll引用可能会产生很大的误导。如果将无效数据传递给任何MSVC标准库函数,则访问冲突将发生在msvcr90.dll中,而不是代码中(查看堆栈跟踪或查看异常信息时) 也就是说,从理论上讲,在VC++6中使用VC9 DLL不应该有问题,因为ABI没有更改,PE格式是相同的。如果平

我用VC++2008创建了一个DLL,当我在控制台应用程序VC++6.0中使用它时,出现了一个异常:

(msvcr90.dll):0xc0000005:访问冲突


在这种情况下,
访问冲突
可能意味着很多事情,而
msvcr90.dll
引用可能会产生很大的误导。如果将无效数据传递给任何MSVC标准库函数,则访问冲突将发生在
msvcr90.dll
中,而不是代码中(查看堆栈跟踪或查看异常信息时)

也就是说,从理论上讲,在VC++6中使用VC9 DLL不应该有问题,因为ABI没有更改,PE格式是相同的。如果平台上不支持
msvcrt9.DLL(例如,如果您在Windows NT上运行MSVC6),则可能会有问题,否则就意味着您需要检查代码

我的意思是:附加一个调试器,看看场景下面发生了什么


还有一点需要注意:当动态使用不同版本的MSVC库时,不能在一个库中分配数据,而在另一个库中释放数据,因为不能保证它们使用相同的堆,并且可能会导致内存损坏(以及
访问冲突
错误)这也意味着,如果你写C++,你就不必创建对象,然后将返回值传递给调用的应用程序,因为这将是场景下面发生的事情。

<代码>访问违例<代码>在这种情况下可能意味着很多事情,而MsCRCR90.DLL>代码>引用会非常误导。如果将无效数据传递给任何MSVC标准库函数,则访问冲突将发生在
msvcr90.dll
中,而不是代码中(查看堆栈跟踪或查看异常信息时)

也就是说,从理论上讲,在VC++6中使用VC9 DLL不应该有问题,因为ABI没有更改,PE格式是相同的。如果平台上不支持
msvcrt9.DLL(例如,如果您在Windows NT上运行MSVC6),则可能会有问题,否则就意味着您需要检查代码

我的意思是:附加一个调试器,看看场景下面发生了什么


还有一点需要注意:当动态使用不同版本的MSVC库时,不能在一个库中分配数据,而在另一个库中释放数据,因为不能保证它们使用相同的堆,并且可能会导致内存损坏(以及
访问冲突
错误)这也意味着如果你写C++,你就不能创建一个对象,然后将它返回值,调用它的应用程序,因为这是场景下面会发生的事情。

如果你想用Visual C++版本X构建一个DLL,并在VisualC++版本Y中使用它,你可以选择: < LI>构建一个DLL,它公开了一个“强”纯C接口。在DLL中可以使用C++,但是公共接口必须是纯C(所以,例如,不能跨越DLL边界抛出异常)。
  • 构建一个COMDLL(可能借助ATL等工具)
  • 使用类似COM的技术构建DLL,即仅从DLL中公开抽象接口和工厂函数(这一技术在关于CodeProject的本文中进行了解释,特别是在本段中)

  • <> P> >也要指出,

    如果你想用Visual C++版本X构建一个DLL,并在VisualC++版本Y中使用它,你就有一些选项:

    < LI>构建一个DLL,它公开了一个“强”纯C接口。在DLL中可以使用C++,但是公共接口必须是纯C(所以,例如,不能跨越DLL边界抛出异常)。
  • 构建一个COMDLL(可能借助ATL等工具)
  • 使用类似COM的技术构建DLL,即仅从DLL中公开抽象接口和工厂函数(这一技术在关于CodeProject的本文中进行了解释,特别是在本段中)

  • 也很重要,但是,我从来没有尝试过,但是如果我猜的话,我认为我们不能,因为在VS2008和VS2006中编写C++程序的方式有很多不同之处,比如在2006,我们有H.Head扩展的头文件,但不是2008。但是主要的问题是为什么你想从2008到2006?如果你在设计接口时真的非常小心,那当然是可能的。但是在一般情况下,不,它不会工作。你需要从2008项目导出一个C风格的接口,如果我记得的话,C++类的输出只在编译器的一个版本中工作。我认为这个问题不符合。“这不是一个真正的问题。"有点过分热心了,是吗?我从来没有尝试过,但是如果我猜,那么我认为我们不能,因为在我们在VS2008和VS2006中编写C++程序的方式上有很多不同,例如在2006中,我们有H.Help但不是2008的头文件。但是主要问题是为什么你想从2008到2006?如果你在设计接口时真的非常小心,那当然是可能的。但是在一般情况下,不,它不会工作。你需要从2008项目导出一个C风格的接口,如果我记得的话,C++类的输出只在编译器的一个版本中工作。我认为这个问题不符合。“这不是一个真正的问题。"我们对结尾有点过分热情了,是吗?谢谢马哈茂德,你的留言真的帮了我。我把文本作为std::string发送和接收到Dll函数,当我把它作为char发送和接收时,问题解决了。这几乎总是最大的问题。很高兴我能帮上忙。马哈茂德,你好,很抱歉,我需要一些帮助。我正在把文本发送到我的邮箱DLL并将其作为char*接收,有一个