Visual c++ 如何允许在同一进程中针对不同版本的Visual Studio编译的DLL使用线程构建块

Visual c++ 如何允许在同一进程中针对不同版本的Visual Studio编译的DLL使用线程构建块,visual-c++,directshow,tbb,Visual C++,Directshow,Tbb,在我的DirectShow应用程序中,我有一个第三方DLL(一个32位DirectShow筛选器),我没有与32位Windows版本的“英特尔线程构建块”(tbb.DLL)链接的源代码 如果我想在同一进程中使用自己的DLL中的线程构建块(例如,另一个32位DirectShow筛选器),这是否会迫使我使用与此第三方DLL作者使用的Visual Studio版本相同的版本 编辑-我意识到版本独立的mt库可能是在这种情况下使用的最好的库。如果第三方供应商没有为这个dll构建,会发生什么 在我自己的线程

在我的DirectShow应用程序中,我有一个第三方DLL(一个32位DirectShow筛选器),我没有与32位Windows版本的“英特尔线程构建块”(tbb.DLL)链接的源代码

如果我想在同一进程中使用自己的DLL中的线程构建块(例如,另一个32位DirectShow筛选器),这是否会迫使我使用与此第三方DLL作者使用的Visual Studio版本相同的版本

编辑-我意识到版本独立的mt库可能是在这种情况下使用的最好的库。如果第三方供应商没有为这个dll构建,会发生什么

在我自己的线程构建块安装中,我注意到不同版本的Visual Studio有不同版本的tbb.dll-2005、2008、2010和“MT”(还不确定是什么)。一个明显的原因是tbb.dll的不同版本与Visual Studio运行时库dll的不同版本相链接。是否可以告诉检查需要哪个版本的tbb.dll,或者我是否必须在二进制文件中查找指示所用编译器版本的字符串(第三方dll似乎以静态方式链接visual studio运行时)

据我所知,tbb.dll不使用清单和并行版本控制,不同的编译器版本使用相同的名称。最后一种方法是重命名不同的tbb.dll,并破解导入库或导入以引用重命名的dll,但我真的宁愿避免这种情况。有没有一种干净的方法可以使用链接器选项重定向导入


由于这些DLL是性能良好的DirectShow筛选器,它们不会在它们之间传递Visual Studio运行时或TBB对象,这显然是危险的。它们之间的交互将只限于通过标准COM DirectShow调用来调用。

< P>如果您不使用TBB,问题只涉及VisualStudio版本,那么您不必担心:VisualC++运行时DLL在不同版本之间有不同的名称,例如:代码> MVCR70.DLL< /COD>,<代码> MVCR90.DLL>代码>等。正如您已经发现的,/MT switch将编译/链接运行时的静态版本,并将这些内容嵌入到您的DLL中,而不必担心与对等DLL共享正确的DLL