/// <summary> /// dllファイルを事前に読み込むことで、dllからdllの間接的な読み込みを防ぐ。 /// (SDLのsmpeg.dllなどはこれをしないと配置フォルダを変更できないので) /// </summary> private static YanesdkResult LoadLibrarySafe(string path, string filename) { YanesdkResult result; if (!System.Platform.IsWindows) { // linuxの場合どうやっていいのかは知らん(`ω´) // 必要があるならなんとかしてくれ(´ω`) result = YanesdkResult.HappenSomeError; } else { string dllPathName = FileSys.ConcatPath(path, filename); // いったんCurrent Directoryを変更しないと // smpeg.dllのようにDllMainでおかしなことをしているdllは読み込めない。 // dllは実行ファイル相対で配置されると仮定できる。 // CurrentDirectoryを一時的に変更する { using (CurrentDirectoryHelper helper = new CurrentDirectoryHelper(DllManager.DirectoryPolicy)) { // そのdllファイルが存在するのか事前に調べておく。 if (FileSys.IsExist(dllPathName)) { IntPtr handle = LoadLibrary_(dllPathName); if (handle == IntPtr.Zero) { // Console.WriteLine("dllの読み込みに失敗 : " + dllFileName ); // Debug.Fail(file + " の読み込みに失敗: " + // (new global::System.ComponentModel.Win32Exception()).Message); result = YanesdkResult.HappenSomeError; // なんか致命的なエラー(´ω`) } else { result = YanesdkResult.NoError; } } else { result = YanesdkResult.FileNotFound; } } } } return(result); }