2011-10-05 13 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に関数の名前を指定する必要があります:ドキュメント

[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

DllImport属性のEntryPointプロパティを使用します。あなたのC#コードでReturnValidate2を呼び出すとき

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

さて、あなたは効果的myseconddll.dllにReturnValidateを呼び出します。あなたは、インポート機能には任意の名前を提供することができ
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); 
関連する問題