#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