使用相同的方法名调用多个dll导入

本文关键字:dll 导入 名调用 方法 | 更新日期: 2023-09-27 18:10:42

我正在导入几个非托管的c++ DLL到我的项目中,但是导入的DLL具有相同的方法名称,这会导致编译器问题。例如,

unsafe class Myclass
{
   [DllImport("myfirstdll.dll")]
   public static extern bool ReturnValidate(long* bignum);
   [DllImport("myseconddll.dll")]
   public static extern bool ReturnValidate(long* bignum);
   public Myclass
   {
      int anum = 123;
      long passednum = &anum;
      ReturnValidate(passsednum);
   }
}

现在我要做的是在导入时重命名方法。类似的;

[DllImport("myseconddll.dll")]
public static extern bool ReturnValidate(long bignum) AS bool ReturnValidate2(long bignum);

这可能吗?

使用相同的方法名调用多个dll导入

使用DllImport属性的EntryPoint属性

[DllImport("myseconddll.dll", EntryPoint = "ReturnValidate")]
public static extern bool ReturnValidate2(long bignum);

现在当你在c#代码中调用ReturnValidate2时,你将有效地在myseconddll.dll上调用ReturnValidate。

您可以为您导入的函数提供任何名称,您应该只在DllImport中指定其中的函数名称,使用EntryPoint属性。所以你的代码可以像这样:

[DllImport("myfirstdll.dll", EntryPoint="ReturnValidate")]  
public static extern bool ReturnValidate1(long bignum);  
[DllImport("myseconddll.dll", EntryPoint="ReturnValidate")]  
public static extern bool ReturnValidate2(long bignum);  

使用EntryPoint参数:

[DllImport("myfirstdll.dll", EntryPoint="ReturnValidate")]
public static extern bool ReturnValidate1(long bignum);
[DllImport("myseconddll.dll", EntryPoint="ReturnValidate")]
public static extern bool ReturnValidate2(long bignum);

文档:
http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.aspx
http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.entrypoint.aspx