Как утилизировать неуправляемый ресурс вручную?

StackOverflow https://stackoverflow.com/questions/4721906

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

Любые предложения о том, как я могу утилизировать/очистить этот статический объект, когда я называю утилизацию?

Это было полезно?

Решение

То, что вы думаете, это «внешний статический объект», не является объектом, это просто набор инструкций для компилятора/времени выполнения о том, как найти функцию в 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);
        }
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top