/// <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); }
/// <summary>フォントをオープンする。</summary> /// <remarks> /// <para> /// 指定するのは、フォント名。 /// indexは、ttc(true type collection=ttfが複数入ったフォントファイル)の /// ときに、何番目のものかを指定する。0番から始まる番号。 /// </para> /// <para> /// Windowsならフォルダは決まっているので、カレントとパスの通っている /// ところに無ければ、そこから取得する。 /// </para> /// <para> /// Linuxのほうは、カレント、あとパスの通っているところから取得する。 /// </para> /// </remarks> /// <example> /// 例) /// Windowsでは、 /// <list type=""> /// msgothic.ttc : MSゴシック /// msmincho.ttc : MS明朝 /// </list> /// <para> /// Linuxの場合、日本語フォントを用いる場合は、 /// GT書体 (東京大学多国語処理研究会) /// http://www.l.u-tokyo.ac.jp/GT/ /// などから持ってきて、msgothic.ttcやmsmincho.ttcとリネームして /// カレントフォルダに配置しておくようにしてください。</para> /// /// <para> /// フォントフォルダの検索に用いているAPIは、 /// win95の場合はIE4.0以降をインストールしてないとダメ /// win98以降は使える。 /// </para> /// </example> public YanesdkResult Load(string fontname, int fontsize, int index) { Release(); YanesdkResult hr = Load(FileSys.ReadRW(fontname), fontsize, index); if (hr != YanesdkResult.NoError) { // カレントにないので、SHGetSpecialFolderPath関数を使って // フォントディレクトリを取得して頑張ってみる。 string fontpath; switch (System.Platform.PlatformID) { case Yanesdk.System.PlatformID.Windows: fontpath = FileSys.ConcatPath(Environment.SystemDirectory, @"..\fonts"); break; case Yanesdk.System.PlatformID.Linux: fontpath = "/usr/share/fonts/ja/TrueType/"; break; case Yanesdk.System.PlatformID.MacOS: fontpath = "/System/Library/Fonts/"; break; default: throw null; } hr = Load(FileSys.ReadRW(FileSys.MakeFullName(fontpath, fontname)), fontsize, index); } if (hr == YanesdkResult.NoError) { fileName = fontname; // もし、ローダー以外からファイルを単に読み込んだだけならば、Reconstructableにしておく。 if (constructInfo == null) { constructInfo = new FontConstructAdaptor(fontname, fontsize, index); } } return(hr); }