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

时间:2011-10-05 15:31:57

标签: c# c++ dllimport unsafe

我正在将几个非托管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);

这可能吗?

3 个答案:

答案 0 :(得分:12)

使用DllImport属性的EntryPoint属性。

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

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

答案 1 :(得分:8)

您可以为导入的函数提供任何名称,只应使用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);  

答案 2 :(得分:2)

使用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