2011-01-18 2 views
3

私はアンマネージドリソースを手動で廃棄する方法

[DllImport("wininet.dll")] 
    private extern static bool InternetGetConnectedState(out int Description, int ReservedValue); 
    //Creating a function that uses the API function... 
    public static bool IsConnectedToInternet() { 
     int Desc; 
     return InternetGetConnectedState(out Desc, 0); 
    } 

like-私は処分を呼び出したときに、私は/クリーンアップ本のextern静的オブジェクトを配置する方法上の任意の提案をいくつかのアンマネージコードを使用していますか?

答えて

5

あなたが考えることは、それはDLL内の関数を見つける方法については、コンパイラ/ランタイムへの命令のセットだけだ、「にextern静的オブジェクトが」全然オブジェクトではありませんです。

サンダーが言うように、クリーンアップするものは何もありません。

+0

みんなありがとう一例として、依存しています。わかった。 –

3

現在地アンマネージリソースへのハンドルを持っていません。清掃するものは何もありません。

2

あなたがポインタを得ることができるかどうかは

[DllImport("advapi32.dll", SetLastError = true)] 
static extern bool LogonUser(string principal, string authority, string password, LogonSessionType logonType, LogonProvider logonProvider, out IntPtr token); 

[DllImport("kernel32.dll", SetLastError = true)] 
static extern bool CloseHandle(IntPtr handle); 

public void DoSomething() { 
    IntPtr token = IntPtr.Zero; 
    WindowsImpersonationContext user = null; 
    try { 
     bool loggedin = LogonUser((string)parameters[1], (string)parameters[2], (string)parameters[3], LogonSessionType.Interactive, LogonProvider.Default, out token); 
     if (loggedin) { 
      WindowsIdentity id = new WindowsIdentity(token); 
      user = id.Impersonate(); 
     } 
    } catch (Exception ex) { 

    } finally { 
     if (user != null) { 
      user.Undo(); 
     } 
     if (token != IntPtr.Zero) { 
      CloseHandle(token); 
     } 
    } 
} 
関連する問題