別のアセンブリのクラスを使用する C# プログラムがあり、このクラスはアンマネージ DLL を呼び出して何らかの処理を行います。ここにスニペットがあります:
public class Util
{
const string dllName = "unmanaged.dll";
[DllImport(dllName, EntryPoint = "ExFunc")]
unsafe static extern bool ExFunc(StringBuilder path, uint field);
public bool Func(string path, uint field)
{
return ExFunc(new StringBuilder(path), field);
}
...
}
Util util = new Util();
bool val = util.Func("/path/to/something/", 1);
私が抱えている問題は、「Func」を呼び出すと、メインの C# プログラムがアンロードされないことです。メイン フォーム内で Close() を呼び出すと、タスク マネージャーを見るとプロセスが残っています。「Func」への呼び出しを削除すると、プログラムは正常にアンロードされます。私はいくつかのテストを行いましたが、プログラムの Main 関数は確実に返されるので、ここで何が起こっているのかわかりません。