dlib C++ ライブラリ メジャーバージョンアップ
dlib C++ ライブラリのバージョンが16.0になりました。
メジャーバージョンの変更(15=>16)ということで、色々追加修正が施されている模様です。
GUI周りで気になる追加修正点が数点あります。
・winmain関数の廃止
バージョン15台では、winmain関数がエントリポイントとなっていましたが、
今回のバージョンはこれを廃止し、通常のプログラムと同様にmain関数(またはWinMain関数)
からスタートするようになっています。
この変更に伴い、プログラム開始と同時にメッセージループを回す専用のスレッドが作られる
ようになりました。つまり、メッセージループはmain関数(WinMain関数)とは別のスレッドで
動きます。main関数(WinMain関数)を終了させるとプログラムが終了してしまいますので、
base_window::wait_until_closed()メソッドをmain関数(WinMain関数)の最後に入れて、
ウィンドウが閉じるまで処理を止めておく必要があります。
・winmain関数の廃止
バージョン15台では、winmain関数がエントリポイントとなっていましたが、
今回のバージョンはこれを廃止し、通常のプログラムと同様にmain関数(またはWinMain関数)
からスタートするようになっています。
この変更に伴い、プログラム開始と同時にメッセージループを回す専用のスレッドが作られる
ようになりました。つまり、メッセージループはmain関数(WinMain関数)とは別のスレッドで
動きます。main関数(WinMain関数)を終了させるとプログラムが終了してしまいますので、
base_window::wait_until_closed()メソッドをmain関数(WinMain関数)の最後に入れて、
ウィンドウが閉じるまで処理を止めておく必要があります。
・Unicode文字列の実装
UTF32を扱うための文字列クラスustringと、文字型unicharが実装されました。
C++標準のワイド文字列wstringでもUnicodeを扱うことができますが、
wstringはWindowsではUTF16、LinuxではUTF32という具合に内部形式が環境によりまちまち
となりますので、ustringを使うことで文字列形式をUTF32に統一できるというメリットがあります。
また、今回のバージョンアップにより合成文字かどうかを判定するメソッドが実装さ
れ、それをGUI周りの内部処理に使っています。まだ文字列の入出力はstd::stringを
使っていますが、今後ustringを使うようになるのかもしれません。
UTF32を扱うための文字列クラスustringと、文字型unicharが実装されました。
C++標準のワイド文字列wstringでもUnicodeを扱うことができますが、
wstringはWindowsではUTF16、LinuxではUTF32という具合に内部形式が環境によりまちまち
となりますので、ustringを使うことで文字列形式をUTF32に統一できるというメリットがあります。
また、今回のバージョンアップにより合成文字かどうかを判定するメソッドが実装さ
れ、それをGUI周りの内部処理に使っています。まだ文字列の入出力はstd::stringを
使っていますが、今後ustringを使うようになるのかもしれません。
自作パッチで追加した機能
・OpenGL機能 (いままでと同様です。)
・widget系クラスとクリップボード関数の文字列入出力のマルチバイト化及びUnicode化
オリジナルのライブラリでは現在もまだwidget系クラスの文字列入出力は
std::string(非マルチバイト)です。これを
しています。
・OpenGL機能 (いままでと同様です。)
・widget系クラスとクリップボード関数の文字列入出力のマルチバイト化及びUnicode化
オリジナルのライブラリでは現在もまだwidget系クラスの文字列入出力は
std::string(非マルチバイト)です。これを
・std::string(マルチバイト)
・std::wstring
・dlib::ustring
で入出力できるようにしました。また、内部形式もstd::stringからdlib::ustringに変更・std::wstring
・dlib::ustring
しています。
・std::string<=>std::wstring、std::string<=>dlib::ustring、std::wstring<=>dlib::ustring変換関数の実装
stringをwstringに変換するためには convert_mbstring_to_wstring
wstringをustringに変換するためには convert_wstring_to_utf32
ustringをstringに変換するためには convert_utf32_to_mbstring
という具合に関数名を作成しました。
ただし、std::stringはプラットフォーム依存のマルチバイト文字列として解釈します。
例えばWindowsならばCP932(シフトJIS)、Linuxならば環境により設定されている文字コード
(EUC-JPかUTF8といったところでしょうか)として解釈します。
stringをwstringに変換するためには convert_mbstring_to_wstring
wstringをustringに変換するためには convert_wstring_to_utf32
ustringをstringに変換するためには convert_utf32_to_mbstring
という具合に関数名を作成しました。
ただし、std::stringはプラットフォーム依存のマルチバイト文字列として解釈します。
例えばWindowsならばCP932(シフトJIS)、Linuxならば環境により設定されている文字コード
(EUC-JPかUTF8といったところでしょうか)として解釈します。
関連
- dlib C++ Library 目次
- dlib C++ ライブラリ OpenGLサンプル
- dlib C++ ライブラリ winmain関数について
- dlib C++ ライブラリ GUI部品のマルチバイト化