Вызов нескольких импортов DLL с одним и тем же именем метода - PullRequest
8 голосов
/ 05 октября 2011

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

Теперь я хотел бы переименовать метод при импорте.Что-то вроде:

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

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

Ответы [ 3 ]

12 голосов
/ 05 октября 2011

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

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

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

9 голосов
/ 05 октября 2011

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

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

...