2011-10-05 2 views
6

내 프로젝트에 여러 관리되지 않는 C++ 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); 

이것은 가능합니까?

답변

7

, 당신은 DllImport에서 함수의 이름을 지정해야합니다

12

DllImport 특성의 EntryPoint 속성을 사용하십시오. 당신이 당신의 C# 코드에 ReturnValidate2를 호출 할 때

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

지금, 당신은 효과적으로 myseconddll.dll에 ReturnValidate를 호출합니다.

[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

2

EntryPoint 매개 변수를 사용하여 그것, 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); 
관련 문제