管理されていないリソースを手動で処分する方法は?
-
12-10-2019 - |
質問
私は何らかの管理されていないコードを使用しています -
[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);
}
廃棄するときにこの外部静的オブジェクトを処分/クリーンアップする方法についての提案はありますか?
解決
「extern staticオブジェクト」だと思うのは、オブジェクトではなく、DLLで関数を見つける方法についてのコンパイラ/ランタイムの一連の指示にすぎません。
サンダーが言うように、掃除するものは何もありません。
他のヒント
ここでは、管理されていないリソースへのハンドルはありません。掃除するものは何もありません。
例として、ポインターを取得できるかどうかによって異なります
[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);
}
}
}
所属していません StackOverflow