我正在开发与本机 DLL 交互的 Web 服务,我使用 LoadLibrary/GetModuleHandle/FreeLIbrary 和 GetProcAddress 动态加载/卸载 DLL,因为它不是很稳定。
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);
}
我注意到 w3wp.exe 进程在重负载下偶尔会崩溃,当我尝试调试它时,调试器经常会在我的 NativeMethods.GetModuleHandle() 函数调用处停止。
我找不到任何GetModuleHandle
不是线程安全的证据,所以我想知道在与多线程 .NET 应用程序交互这些 kernel32.dll 函数时,有没有人有类似的经验?
奥斯卡