Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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
Visual studio 2010 使用VS2008构建的dll可以使用使用VS2010构建的dll吗_Visual Studio 2010_Visual Studio 2008_Com_Mixing - Fatal编程技术网

Visual studio 2010 使用VS2008构建的dll可以使用使用VS2010构建的dll吗

Visual studio 2010 使用VS2008构建的dll可以使用使用VS2010构建的dll吗,visual-studio-2010,visual-studio-2008,com,mixing,Visual Studio 2010,Visual Studio 2008,Com,Mixing,我有一个用VS2010构建的dll(dll a),它使用MFC和其他用VS2010构建的dll。 我有另一个dll(dll B),它是用VS2008构建的,运行在一个再次用VS2008构建的应用程序上。DLL A导入DLLB(带有#导入指令)并创建com对象。对象本身的创建成功,但应用程序在某个地方崩溃。我认为它在显示控件时崩溃(这些只是假设)。问题是我没有这个应用程序的来源。DLL A只是该应用程序的一个插件。 问题是,在进行这种混合时,是否需要考虑什么?是否有可能?< P>是的,如果使用C链

我有一个用VS2010构建的dll(dll a),它使用MFC和其他用VS2010构建的dll。 我有另一个dll(dll B),它是用VS2008构建的,运行在一个再次用VS2008构建的应用程序上。DLL A导入DLLB(带有#导入指令)并创建com对象。对象本身的创建成功,但应用程序在某个地方崩溃。我认为它在显示控件时崩溃(这些只是假设)。问题是我没有这个应用程序的来源。DLL A只是该应用程序的一个插件。
问题是,在进行这种混合时,是否需要考虑什么?是否有可能?

< P>是的,如果使用C链接,则调用DLL边界的代码应该是好的。如果DLL边界使用像Car *和int的原始C类型。如果您在DLL边界上传递C++引用/指针,则应该使用相同的编译器标志和相同的编译器来构建两边。例如,无法保证VS2010编译器将以与VS2008编译器完全相同的方式为类对象布局内存,尽管如果使用相同的字节对齐标志,布局很可能是相同的,你不能保证。

所有进入/从DLL A中出来的参数都是DLL中公开的com对象。在这种情况下,因为你使用的是com,所以DLL边界的每一侧没有理由不使用不同的编译器。