C程序如何使用C++;任何版本的dll? 我们正在创建一个用C++编写的DLL,提供对一些硬件的访问。我们还有一个C#程序使用这个dll
我们的版本有问题。实际上,当运行C++程序时,它绝对希望使用编译时使用的精确的C++ DLL版本。也就是说,如果C++程序是用C++ DLL1.2.3.4编译的,那么程序将拒绝用C++ DLL1.2.3.5运行。 我想指导C程序使用任何版本1.2的C++ DLL。任何东西。 我可以在C#项目中的何处配置此功能C程序如何使用C++;任何版本的dll? 我们正在创建一个用C++编写的DLL,提供对一些硬件的访问。我们还有一个C#程序使用这个dll,c#,c++,.net,dll,version,C#,C++,.net,Dll,Version,我们的版本有问题。实际上,当运行C++程序时,它绝对希望使用编译时使用的精确的C++ DLL版本。也就是说,如果C++程序是用C++ DLL1.2.3.4编译的,那么程序将拒绝用C++ DLL1.2.3.5运行。 我想指导C程序使用任何版本1.2的C++ DLL。任何东西。 我可以在C#项目中的何处配置此功能 这个问题已被与COM更相关的问题所取代。在运行时加载dll并使用反射调用其方法 Assembly assembly = Assembly.LoadFrom("C:\\test.dll");
这个问题已被与COM更相关的问题所取代。在运行时加载dll并使用反射调用其方法
Assembly assembly = Assembly.LoadFrom("C:\\test.dll");
Assembly.GetTypes();
Activator.CreateInstance(type);
我认为不可能将您的程序配置为使用1.2.*版本而不使用其他版本。除非你自己写代码。另一种可能是不改变C++ DLL的版本标记,但它似乎并不是你想要的。 避免版本依赖性的解决方案是使用dllimport。您可以用它加载任何用C++编写的DLL。它没有版本依赖性。请参见最后msdn和链接中的示例:
using System;
using System.Runtime.InteropServices;
class Example
{
// Use DllImport to import the Win32 MessageBox function.
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
static void Main()
{
// Call the MessageBox function using platform invoke.
MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
}
}
< C++ >中没有这种幻想存在。从技术上讲,使用并行清单可以做到这一点,但您应该知道这一点,因为您应该在C#程序的清单中键入版本号 更可能的解释是您实际创建了一个C++/CLI程序集。许多程序员混淆C++和CLI和C++。容易出错,因为该语言允许使用本机C++代码。但它实际上被编译成一个混合模式程序集,一个包含IL和本机代码的程序集。当CLR加载这样的程序集时,会对其进行常规的CLR版本检查,它只对精确的版本匹配感到满意。一个强有力的对策 正常CLR版本争用选项可用于绕过此检查,即app.exe.config文件中的
元素。以及控制程序集版本号,就像控制C#代码一样,因此这是不必要的
检查此猜测是否准确的最简单方法是使用Project+Add引用并选择DLL。如果这没有引起任何抱怨,并且程序集被添加到C#项目的References节点,那么您就知道它是一个普通的.NET程序集。不要忘记利用这一点,不需要pinvoke。您的C程序如何使用此dll?您是否使用C++/CLI汇编?请添加一些有关如何构建软件的详细信息…@alexbuisson dll未使用C++/CLI。dll被编译成本机可执行文件。哦,好的。你不能动态加载C++ DLL吗?