Estoy trabajando en un servicio web que interactúa con una DLL nativa y uso LoadLibrary/GetModuleHandle/FreeLIbrary y GetProcAddress para cargar/descargar dinámicamente la DLL porque no es muy estable.¿Las funciones LoadLibrary, FreeLibrary y GetModuleHandle Win32 son seguras?
public class NativeMethods
{
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr LoadLibrary(string libname);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr GetModuleHandle(string libname);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern bool FreeLibrary(IntPtr hModule);
[DllImport("kernel32.dll", CharSet = CharSet.Ansi)]
public static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);
}
me he dado cuenta de que el proceso w3wp.exe se bloquea occationally bajo carga pesada y cuando traté de depurarlo el depurador a menudo se detiene en mi llamada a la función NativeMethods.GetModuleHandle().
no pude encontrar ninguna evidencia de que GetModuleHandle
no es seguro para subprocesos por lo que me pregunto ¿alguien tiene alguna experiencia similar al interactuar estas funciones kernel32.dll de aplicaciones de subprocesos múltiples .NET?
Oscar
LoadLibrary y FreeLibrary deberían ser seguros para hilos en relación con la lista de cargas DLL, y en teoría también debería GetModuleHandle, sin embargo, probablemente usaría un par LoadLibrary/FreeLibrary en lugar de usar ese método para asegurarse de tener una referencia a la biblioteca y no puede simplemente desaparecer de la memoria mientras lo estás usando. – tyranid