Вызов нескольких импортируемых dll файлов с одним и тем же именем метода

#c# #c #dllimport #unsafe

#c# #c #dllimport #небезопасно

Вопрос:

Я импортирую несколько неуправляемых DLL-файлов c в свой проект, однако импортированные 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 = amp;anum;
      ReturnValidate(passsednum);
   }
}
  

Теперь, что я хотел бы сделать, это переименовать метод при импорте. Что-то вроде;

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

Возможно ли это?

Ответ №1:

Используйте свойство EntryPoint атрибута DllImport.

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

Теперь, когда вы вызываете ReturnValidate2 в своем коде на C #, вы будете эффективно вызывать ReturnValidate на myseconddll.dll .

Ответ №2:

Вы можете указать любое имя для импортируемой вами функции, вы должны указать только 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);  
  

Ответ №3:

Используйте 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