ネイティブ 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 関数を操作するときに、似たような経験をした人はいますか?
オスカー