So-net無料ブログ作成

Hello wxWidgets

wxWidgets を VS2015 でビルドしましたが、ビルドできたか確認
するため、かつ1からお勉強するために、サンプルをビルドしました。

大量に Sample があって素晴らしいですが、 minimal という最小コード
っぽいのが入っていたのでこれを使いました。

1. VS2015 で minimal_vc9.vcxproj を開く
2. ビルド
3. 実行
4. ウインドウが出た!

hellowxwidgets.png

デフォルトでは構成が "Debug" になっていて、ビルドの設定は以下のように
なっていました。

Debug 構成

インクルードディレクトリ
.\..\..\lib\vc_lib\mswud;.\..\..\include;.;.\..\..\samples;%(AdditionalIncludeDirectories)

プリプロセッサ
WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE=1;_CRT_NON_CONFORMING_SWPRINTFS=1;
_SCL_SECURE_NO_WARNINGS=1;__WXMSW__;_UNICODE;_WINDOWS;NOPCH;
%(PreprocessorDefinitions)


コード生成
マルチスレッドデバッグ DLL(/MDd)

ライブラリディレクトリ
.\..\..\lib\vc_lib;%(AdditionalLibraryDirectories)

追加の依存ファイル
wxmsw31ud_core.lib;wxbase31ud.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;
wxzlibd.lib;wxregexud.lib;wxexpatd.lib;kernel32.lib;user32.lib;
gdi32.lib;comdlg32.lib;winspool.lib;winmm.lib;shell32.lib;shlwapi.lib;
comctl32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;advapi32.lib;
version.lib;wsock32.lib;wininet.lib;%(AdditionalDependencies)


Release 構成

インクルードディレクトリ
.\..\..\lib\vc_dll\mswu;.\..\..\include;.;.\..\..\samples;%(AdditionalIncludeDirectories)

プリプロセッサ
WIN32;_CRT_SECURE_NO_DEPRECATE=1;_CRT_NON_CONFORMING_SWPRINTFS=1;
_SCL_SECURE_NO_WARNINGS=1;__WXMSW__;NDEBUG;_UNICODE;_WINDOWS;NOPCH;
%(PreprocessorDefinitions)


コード生成
マルチスレッド DLL(/MD)

ライブラリディレクトリ
Debug 構成と同じ

追加の依存ファイル
wxmsw31u_core.lib;wxbase31u.lib;wxtiff.lib;wxjpeg.lib;wxpng.lib;
wxzlib.lib;wxregexu.lib;wxexpat.lib;kernel32.lib;user32.lib;
gdi32.lib;comdlg32.lib;winspool.lib;winmm.lib;shell32.lib;shlwapi.lib;
comctl32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;advapi32.lib;
version.lib;wsock32.lib;wininet.lib;%(AdditionalDependencies)


DLL Debug 構成

インクルードディレクトリ
.\..\..\lib\vc_dll\mswud;.\..\..\include;.;.\..\..\samples;%(AdditionalIncludeDirectories)

プリプロセッサ
WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE=1;_CRT_NON_CONFORMING_SWPRINTFS=1;
_SCL_SECURE_NO_WARNINGS=1;__WXMSW__;_UNICODE;WXUSINGDLL;_WINDOWS;NOPCH;
%(PreprocessorDefinitions)


コード生成
マルチスレッドデバッグ DLL (/MDd)

ライブラリディレクトリ
.\..\..\lib\vc_dll;%(AdditionalLibraryDirectories)

追加の依存ファイル
wxmsw31ud_core.lib;wxbase31ud.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;
wxzlibd.lib;wxregexud.lib;wxexpatd.lib;kernel32.lib;user32.lib;
gdi32.lib;comdlg32.lib;winspool.lib;winmm.lib;shell32.lib;shlwapi.lib;
comctl32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;advapi32.lib;
version.lib;wsock32.lib;wininet.lib;%(AdditionalDependencies)


DLL Release 構成

インクルードディレクトリ
.\..\..\lib\vc_dll\mswu;.\..\..\include;.;.\..\..\samples;%(AdditionalIncludeDirectories)

プリプロセッサ
WIN32;_CRT_SECURE_NO_DEPRECATE=1;_CRT_NON_CONFORMING_SWPRINTFS=1;
_SCL_SECURE_NO_WARNINGS=1;__WXMSW__;NDEBUG;_UNICODE;WXUSINGDLL;_WINDOWS;NOPCH;
%(PreprocessorDefinitions)


コード生成
マルチスレッドDLL(/MD)

ライブラリディレクトリ
.\..\..\lib\vc_dll;%(AdditionalLibraryDirectories)

追加の依存ファイル
wxmsw31u_core.lib;wxbase31u.lib;wxtiff.lib;wxjpeg.lib;wxpng.lib;
wxzlib.lib;wxregexu.lib;wxexpat.lib;kernel32.lib;user32.lib;
gdi32.lib;comdlg32.lib;winspool.lib;winmm.lib;shell32.lib;shlwapi.lib;
comctl32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;advapi32.lib;
version.lib;wsock32.lib;wininet.lib;%(AdditionalDependencies)


その他

DLL Debug でビルドした場合は、実行前に samples\minimal\vc_mswuddll に 上記 lib\vc_dll
ディレクトリから wxbase310ud_vc_custom.dll と wxmsw310ud_core_vc_custom.dl
を探してきてコピーする必要がありました。

インクルードディレクトリの samples は外してもビルド通りました。
ほかのサンプルでは使っているかもしれませんが、 miniumal では不要です。

追加の依存ファイルが大量なのと、プリプロセッサの設定が必要なのは
ハマりどころかもしれません。普通はインクルードとライブラリくらいしか設定しないので。

まとめ

自分でプロジェクトを作るときは次のように設定すればよい。

dll を使うとき

インクルード
- lib\vc_dll\mswud
- include
プリプロセッサ
__WXMSW__;_UNICODE;WXUSINGDLL
ライブラリパス
- lib\vc_dll
追加の依存ファイル
- デバッグ
wxmsw31ud_core.lib;wxbase31ud.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;
wxzlibd.lib;wxregexud.lib;wxexpatd.lib;kernel32.lib;user32.lib;
gdi32.lib;comdlg32.lib;winspool.lib;winmm.lib;shell32.lib;shlwapi.lib;
comctl32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;advapi32.lib;
version.lib;wsock32.lib;wininet.lib;%(AdditionalDependencies)

- リリース
wxmsw31u_core.lib;wxbase31u.lib;wxtiff.lib;wxjpeg.lib;wxpng.lib;
wxzlib.lib;wxregexu.lib;wxexpat.lib;kernel32.lib;user32.lib;
gdi32.lib;comdlg32.lib;winspool.lib;winmm.lib;shell32.lib;shlwapi.lib;
comctl32.lib;ole32.lib;oleaut32.lib;uuid.lib;rpcrt4.lib;advapi32.lib;
version.lib;wsock32.lib;wininet.lib;%(AdditionalDependencies)


static link するとき

インクルード
- lib\vc_lib\mswud
- include
プリプロセッサ
__WXMSW__;_UNICODE;
ライブラリパス
- lib\vc_lib
追加の依存ファイル
- 前述 dll を使うときと同じ


wxWidget を VS2015 でビルド [C++]

wxWidget を使ってみようと思いダウンロードすると VS2015 用の
プレビルドがなかったのでビルドしてみました。

まだ使っていないので、あっているかどうかわからないけど、ビルドは
通ったのでとりあえずメモ。 nmake のオプションは build\msw\config.vc
に説明が書いてあるのを参考にしました。

1. ソースコードダウンロード
git clone https://github.com/wxWidgets/wxWidgets.git

2. ビルドの設定が反映されるヘッダー?を作成
include/wx/msw/setup0.h を include/wx/msw/setup.h にリネーム

3. x86 版をビルド
VS2015 x86 Native Tools コマンドプロンプトで以下を実行



4. x64 版をビルド
VS2015 x64 Native Tools コマンドプロンプトで以下を実行


boost::property_tree の使い方メモ [C++]

Sony Camera Remote API の getEvent で取れる json のパースに
boost::property_tree を使うときに、いまいちよくわかってなかったので
メモ。

この api で返ってくる json は {{result:[{...},"null","",[...]}}
みたいなので、null になったり 空文字になったり状態によって変化する曲者。
なのでちゃんと処理しないと例外が出る。例外はデバッグのときに紛らわしい
ので、なるべく出さないようにしたいので、事前に判定したい。

ノードがあるかわからないときは optional で取得すれば例外を出さずに
判定できる。

ただの文字列("null" or "") か何か値が入っている ("{x:y}" or "[...]") かどうか
は child.size() をみればOK(たぶん)

code


output
e.first.data()=
e.second.data()=
child.get_optional("")=
child.size()=2
----
e.first.data()=
e.second.data()=null
child.get_optional("")= null
child.size()=0
----
e.first.data()=
e.second.data()=
child.get_optional("")=
child.size()=0
----
e.first.data()=
e.second.data()=
child.get_optional("")=
child.size()=1
----


const array メンバの初期化 [C++]

メンバ関数のポインタを、配列でメンバ変数に持ちたい。
その配列は固定長なので const にしておきたい。
たまにしか使わないので、毎回つまづくからメモ。




boost::asio::streambuf にバイナリファイルを読み込む [C++]



git の使い方メモ [Git]

mybranch と言う名のブランチ作成
git branch mybranch
git checkout mybranch


以下の一行でも同じ
git checkout -b mybranch


mybrancyh をリモートに push
git commit -a -m "implemented blah blah"
git push origin mybranch


mybranch を master にマージ
git checkout master
git merge --no-ff mybranch


変更取り消し
git reset --hard HEAD


ブランチを削除
git branch --delete mybranch
git push --delete origin mybranch


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。