2011-10-05 5 views
6

Importando diverse DLL C++ non gestite nel mio progetto, tuttavia le DLL importate hanno lo stesso nome di metodo che causa problemi di compilazione. Per esempio;Chiamare più importazioni di dll con lo stesso nome di metodo

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); 
    } 
} 

Ora quello che mi piacerebbe fare sarebbe rinominare il metodo di importazione. Qualcosa di simile a;

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

È possibile?

risposta

7

Si potrebbe fornire un nome per la funzione importata, è necessario specificare solo in DllImport il nome della funzione in it, usando la proprietà EntryPoint. Quindi il codice potrebbe avere il seguente aspetto:

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

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

Utilizzare la proprietà EntryPoint dell'attributo DllImport.

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

Ora quando si chiama ReturnValidate2 nel codice C#, si sarà effettivamente chiamare ReturnValidate su myseconddll.dll.

2

utilizzare il parametro 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); 

Documentazione:
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