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

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

Это возможно?


person wonea    schedule 05.10.2011    source источник


Ответы (3)


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

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

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

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

person m-sharp    schedule 05.10.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

person Polynomial    schedule 05.10.2011