Pregunta

Estoy utilizando un código no administrado como -

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

¿Alguna sugerencia sobre cómo puedo disponer / limpieza de este objeto estático externo cuando llamo Desechar?

¿Fue útil?

Solución

Lo que usted piensa es un 'objeto estático externo' no es un objeto en absoluto, es sólo un conjunto de instrucciones para el compilador / tiempo de ejecución acerca de cómo encontrar una función en un archivo DLL.

Como Sander dice, no hay nada que limpiar.

Otros consejos

No tenemos ninguna mangos a los recursos no administrados aquí. No hay nada que limpiar.

Depende si se puede obtener un puntero, como un ejemplo

[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);
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top