【GUI】wxWidgets(旧wxWindows) その5【サイザー】at TECH
【GUI】wxWidgets(旧wxWindows) その5【サイザー】 - 暇つぶし2ch395:デフォルトの名無しさん
12/01/18 14:41:08.38 .net
何が間違っているのか教えてください。
wxWigets2.9.3を使用しています。
URLリンク(docs.wxwidgets.org)
ここを参考にしました。
wxRenameFile(_T("z:\\test.txt"),_T("z:\\test2.txt"));
コンパイル後、実行すると Failed to copy the file 'z:\test.txt' to 'z:\test2.txt' (error 2: 指定されたファイルが見つかりません。と表示されます。
zドライブ上には、test.txtファイルはあります。

試しに、下記を試すと実行できました。
  wxMkdir(_T("Z:\\T"));
wxMkdir(_T("Z:\\T"));

と実行すると、ディレクトリの作成と削除はできました。
2.9.3が開発版だからなにか問題があるかと思い、2.8.12を入れてみたのですが同じ現象です。

多分書き方が悪いんだと思うのですが、どこがわるいのかわかりません。

教えてください。





396:デフォルトの名無しさん
12/01/18 14:50:42.64 .net
馬鹿には無理

397:デフォルトの名無しさん
12/01/18 15:44:45.10 .net
>>395
テキストファイルが読み取り専用になってたりしない?

398:デフォルトの名無しさん
12/01/18 16:01:13.12 .net
>>397
レスありがとうございます。
読み込み専用ではなかったのですが、windowsの拡張子を表示する設定にしていませんでした。
拡張子を表示する設定にしたところ、test.txt.txtになっていました。
すみません、初歩的な事を数日見逃していました。

レスありがとうございました。


399:デフォルトの名無しさん
12/01/18 16:41:41.95 .net
わろす

400:デフォルトの名無しさん
12/01/18 18:21:10.87 .net
なんか若い子がいっぱい来た感じ

>>396
これはスクリプトなのかしら

401:デフォルトの名無しさん
12/01/18 18:24:47.81 .net
>>394
エラーログを貼らないとどんなハッカーでも原因はわからんですよ^^;
そもそもCode::Blocksはビルドする必要ないような?初心者はバイナリバージョンをダウンロードすればいいと思うよ。
もしCode::Blocksの翻訳とかやってる方だったら全力支援しますが

402:401
12/01/18 18:27:55.92 .net
ごめん>>401は忘れてください。ただの報告だったんですね・・・
またエラーかと思った


403:デフォルトの名無しさん
12/01/19 00:46:20.39 .net
わろす

404:デフォルトの名無しさん
12/01/22 22:48:49.88 .net
wxWidgets2.9.3を使用しています。
下記リンクを参考にしました。
URLリンク(docs.wxwidgets.org)

文字列の中に特定の文字が複数回出た場合の検索を行いたいです。

.find()この中に、aとか、txtとか入れると、最初の桁数だけ検索できます。
たとえば、[t]と入力すると、文字列の中に4回でてきますが、一個目のものしか検索されません。
また、[猫]や[犬]などを入力すると、ループの処理に入らずすぐに終了します。
[あ] を入力すると、1回ループ処理に入っているますが、検索結果に0が帰ってきます。

コードは以下のようになっています。

//wxString gpath C:\Users\x\Desktop\practice\猫犬象aAbB猫猫猫犬犬あいう.txt
    wxString bb,cc,dd;
size_t pos=0;
if((pos=::gpath.find(("猫"),pos))!= wxString::npos)
{
wxMessageBox(_T("ループ 処理開始"));
pos = ::gpath.find("猫",pos);
cc.Printf(_T("%d"),pos);
dd += cc;
dd += "\n";
pos + 1;
wxMessageBox(_T("ループ 判定処理に戻る"));
}
readpos -> SetValue(dd);
wxMessageBox(_T("終了"));

文法?など、何が間違っているか教えてください。

405:デフォルトの名無しさん
12/01/22 23:59:25.48 .net
>>404
wxString gpath = L"C:\\Users\\x\\Desktop\\practice\\猫犬象aAbB猫猫猫犬犬あいう.txt";
wxString word = L"猫";
wxString result;
size_t pos = 0;
wxMessageBox(_T("ループ 処理開始"));
while ((pos = gpath.find(word, pos)) != wxString::npos) {
result += wxString::Format(L"%d\n", pos);
pos += word.size();
wxMessageBox(_T("ループ 判定処理に戻る"));
}
OutputDebugStringW(result.c_str());

pos + 1はpos += 1のタイポだと好意的に解釈するにせよ、それでも
「何故1なのか」が理解できてないのはちょっとまずい。
ifとwhileの区別が付いてないのもかなり厳しい。
charとwchar_tの違いについてとか、
1. (pos = gpath.find(word, pos)) != wxString::npos
2. pos = gpath.find(word, pos) != wxString::npos
は全く意味が違う、とか。
wxWidgets以前に、まず基本的な文法を押さえることから始めた方がいいと思う。


406:デフォルトの名無しさん
12/01/23 01:28:04.42 .net
>>404
レスありがとうございます。

>>ifとwhileの区別が付いてないのもかなり厳しい。
理由がわからないので、whileとifを書き直してテストしてました。
これは、コピペを修正するのを忘れていました。 
ただ、最初はforで試したのですが、まったくだめでwhileやifなどを試してみました。
ただ理解してないのは間違いないです。

>>pos + 1はpos += 1のタイポだと好意的に解釈するにせよ
検索後、ひとつ右の文字から再度検索したかったので +1 にしたのでタイプミスではありませんでした。
+=でないとだめとのことなので、考え方が間違っているのですね。
見直します。

>>charとwchar_tの違いについてとか、
charがabとか半角文字で、wcar_tが2バイト文字が許されると漠然と認識しています。
ユニコードビルドなので、wxStringを使用した場合すべて2バイト文字が許されると認識していましたが、
なんか違うようですね。
wxString word = L"猫”;
wxString::Format
など、知らないものがでてきたので、これも調べます。

ありがとうございました。

407:デフォルトの名無しさん
12/01/23 03:10:53.18 .net
VCでもmingwでも pos + 1; に対してはWarning出すから、
ちゃんとWarningは読んで意味を理解しよう。
VC使ってるならステップ実行も使おう。

>charがabとか半角文字で、wcar_tが2バイト文字が許される
L""を知らなかった、ということはたぶん間違った理解をしてる。
まずはstring, wstringを使って両者についての理解を深めた方が良いかも。
ちなみにVCとmingwでwchar_tの定義は異なるので、それに気付かず両者を混同して
テストすると理解が深まるどころか発狂しそうになるので要注意。

知らないことが出てきたらまず自分で調べる、というのは正しい姿勢だし、
これからも是非継続してもらいたいけれども、この辺はもう完全にスレチなので、
c++初心者スレとかで聞いた方がいいと思う。
まあ頑張ってくれ。

408:デフォルトの名無しさん
12/02/02 23:41:58.22 .net
TDM-GCC 32bit wxWidgets2.9.3を使用しています。
URLリンク(docs.wxwidgets.org)を参考にしました。
URLリンク(2ch.ac.la) を参考にしました。
wxRegExの機能を使用したいです。

[ももも]猫[]け[2.5]犬象()aA b  B(2012年01月24日)猫猫__@(H23)_猫(わんわん)犬犬あいう.txt
という文字列から正規表現で文字を検索の仕方を調べています。
試しに\[...\]と正規表現をいれて実行したところ[ももも]というのは検索できました。

もうひとつ[2.5]というのも検索されているはずかなと思うのですが、とうやればいいかがよくわかりません。

以下のコードで、\[...\]で[ももも]は検索できました。

wxString search (L"\[...\]")
wxString text; (L"[ももも]猫[]け[2.5]犬象()aA b  B(2012年01月24日)猫猫__@(H23)_猫(わんわん)犬犬あいう.txt"
wxRegEx cktext(search);
wxString result;
if(cktext.Compile(search,wxRE_EXTENDED) == TRUE)
if( cktext.Matches(text,wxRE_NOTBOL))
result += cktext.GetMatch(text,count);

で、2件以上ヒットする場合はループにする必要があるかと次のようにしてみました。

409:デフォルトの名無しさん
12/02/02 23:49:55.81 .net
if(cktext.Compile(search,wxRE_EXTENDED) == TRUE)
{
wxMessageBox(L"正規表現です。");
if( cktext.Matches(text,wxRE_NOTBOL))
{
wxMessageBox(L"マッチ処理に入りました");
count = cktext.GetMatchCount();
wxMessageBox(wxString::Format("%d",count));
for (size_t i=0 ; i < count ; count--)
{
wxMessageBox(L"マッチループ処理に入りました");
result += cktext.GetMatch(text,count);
wxMessageBox(L"いったんすとっぷ1");
results -> SetValue(result);
wxMessageBox(L"いったんすとっぷ2");
}
results -> SetValue(result);
} else {
wxMessageBox(L"マッチ処理にヒットしませんでした。");
}
} else {
wxMessageBox(L"正規表現ではありません。");
}
実行しますと、「マッチループ処理に入りました」メッセージの後に、
faild in GetMatch() invalid match indexと表示されます。
wxMessageBox(wxString::Format("%d",count));
ここで1が帰ってくるのですくなくとも1件はヒットしていると思うのですが・・・・

考え方や、ソースのどこが間違っているのか教えてください。

410:デフォルトの名無しさん
12/02/03 00:46:43.23 .net
>>409
詰まったら詰まった現象を再現できる可能な限り短いコードを晒してくれ。
バグってる長いコードなんて誰も読みたくはない。

一応ヒントになりそうなコードは書いたが、
今回も残念ながらwxWidgets以前の問題だ。
正規表現に関してちゃんと勉強してくれ。

wxString regexText(L"\\[...\\](.)");
wxString text(L"[ももも]猫[]け[2.5]");
wxRegEx rx;
rx.Compile(regexText, wxRE_EXTENDED);

if (rx.Matches(text, wxRE_NOTBOL)) {
int n = rx.GetMatchCount();
for (int i = 0; i < n; ++i) {
wxMessageBox(rx.GetMatch(text, i));
}
}


411:デフォルトの名無しさん
12/02/03 02:34:29.06 .net
>>410
レスありがとうございます。

>詰まったら詰まった現象を再現できる可能な限り短いコードを晒してくれ。
>バグってる長いコードなんて誰も読みたくはない。
次からそのように心がけます。

>今回も残念ながらwxWidgets以前の問題だ。
>正規表現に関してちゃんと勉強してくれ。

もう一度、正規表現のコンテンツを読みます。

コードを書いてくれてありがとうございます。
参考にします。

しばらく時間がかかりそうですが、うまくいきましたら報告にきます。
ありがとうございました。

412:デフォルトの名無しさん
12/02/03 12:24:05.07 .net
>>409
> for (size_t i=0 ; i < count ; count--)
count-- っておま


413:デフォルトの名無しさん
12/02/04 00:41:55.82 .net
>>412
--ってあまりよくないようなので、i++に変更しました。

wxString regexText(L".?");
wxString text(L"abc123");
wxRegEx rx;
rx.Compile(regexText,wxRE_ADVANCED);
if (rx.IsValid()==TRUE)
{
if (rx.Matches(text)) {
int n = rx.GetMatchCount();
for (int i = 0; i < n; ++i) {
wxMessageBox(rx.GetMatch(text, i));
}}}

上記コードでコンパイルしたところ、faild in GetMatch() invalid match indexというのはでなくなりました。
((count--)と実行していた行で、エラーが発生していました。)

最短一致 .?を期待しています。 このソースだとaだけが表示されて、forを抜けてしまいます。
.?なので、全ての文字の1文字か0文字で、一文字が検索されると認識しています。

私の認識では、6回メッセージが表示されると思っているのですが、この考えは間違っているのでしょうか?
a,b,c,1,2,3と 一文字ずつメッセージが表示されると思っているのですが・・・

それとも正規表現の場合、一つの文字列から検索する場合には一回のみしか検索しないのでしょうか?
ただ、GetMatchCountでヒットした回数と内容を覚えているような気もします・・・

正規表現もこれであっているかの自信もないのですが、どこに間違えがありますか?
教えてください。

414:デフォルトの名無しさん
12/02/04 02:27:28.32 .net
>正規表現の場合、一つの文字列から検索する場合には一回のみしか検索しないのでしょうか?
その通り。
むしろ前回の状態を記憶するとどうして思ったのかがよくわからない。

>GetMatchCountでヒットした回数と内容を覚えているような気もします
覚えてない。
1が返ってきたなら「この正規表現にマッチした集合は1つ」という意味しかない。

>正規表現もこれであっているか
あってる。

415:デフォルトの名無しさん
12/02/04 12:58:33.95 .net
>>414
レスありがとうございます。

>むしろ前回の状態を記憶するとどうして思ったのかがよくわからない。
URLリンク(www.adras.com)
このようなページを時々見かけまして、一回の検索で、reEmail.GetMatch(email, 1);のように複数
書いているので、見つかったものは全部読めると思っていました。

>覚えてない。
>1が返ってきたなら「この正規表現にマッチした集合は1つ」という意味しかない。
なるほど、一つしか見つかっていないのですね。

>あってる。
了解です。

疑問なのですが、"(raw)(H24.2.4)北海道で撮影しました。"
という文字列を正規表現で検索した場合に、"北海道で撮影しました。"という文字列に
変換したい場合には、wxRegExを使用する場合には、以下の流れになるのでしょうか?

1・ \(.*?\)で、上記文章を最短一致で検索
2・ (raw)が検索にかかるので、これを削除。
3・ 削除後の文字列"(H24.2.4)北海道で撮影しました。"を新規で、wxStringに格納。
4・ \(.*?\)で再度最短一で検索。
5・ (H24.2.4)が検索にかかるので、これを削除。
6・ 削除後の文字列"北海道で撮影しました。"を新規で、wxStringに格納。

wxRegExで最短一致で検索した場合に複数一致する場合があった場合。
マッチした部分の削除・置き換えを行いたい場合はこのような流れにするしかないのでしょうか?
教えてください。

416:デフォルトの名無しさん
12/02/04 13:59:31.73 .net
スレ違い

417:デフォルトの名無しさん
12/02/04 16:35:13.66 .net
>正規表現
スレチだから詳しく書く気はない。

"北.+で.+た"
文字コードの問題はあるが、この正規表現は
"北海道で撮影しました"にも"北陸で撮影しました"にもマッチする。で、
"(北.+)で.+た"
とすると、全体がマッチした上で、北で始まり「で」で終わる文字列が
部分集合としてキャプチャされる。

>wxRegExのお話
GetMatchでindexを指定すると、0番目にマッチした全体が入り、
1番目以降はこの部分集合が順に入る。
例だとGetMatch(text, 1)で「北陸」か「北海道」が返ってくる。
たぶんその辺を理解してないんだろうなぁと思ったので
410で "\\[...\\](.)" ってわざわざキャプチャ入れたサンプルにしたのに・・・


>()で囲まれた部分を消去したい
wxString text(L"(raw)(H24.2.4)北海道で撮影しました。");
wxRegEx rx(L"\\(.*?\\)", wxRE_ADVANCED);
rx.ReplaceAll(&text, L"");
wxMessageBox(text);


418:デフォルトの名無しさん
12/02/05 01:18:16.61 .net
>>416 417
>スレチだから詳しく書く気はない。
すいません。

>とすると、全体がマッチした上で、北で始まり「で」で終わる文字列が
>部分集合としてキャプチャされる。

キャプチャという用語を知りませんでした。
正規表現に関して、コンテンツよんでいたつもりのようでした。
で、gogleで調べたところたくさん記載しているサイトがありました。

>たぶんその辺を理解してないんだろうなぁと思ったので
>410で "\\[...\\](.)" ってわざわざキャプチャ入れたサンプルにしたのに・・・
一度だけ、その正規表現で検索したときに、マッチカウント2回表示されました。
で、エラーもでなくなったので、コードが正常なのでそういう風になっているのかと
軽く考えていました。

本来は自分で考えることだと思いますが、消去したいコードを書いてくれてありがとうございます。

正規表現の書き方を完全に理解しないとやりたいことができませんので、一旦正規表現をしばらく調べます。
キャプチャ・・・かなりすっきりしました。

本当にありがとうございました。

419:デフォルトの名無しさん
12/02/06 17:29:11.83 .net
最新の2.8を使ってるが勝手にメモリリークしていくな
しかもデバッグDLLがコンパイルすら出来ないからテスト出来ないし
中身を作り替えたとか言ってたがものすごい劣化してるな

420:デフォルトの名無しさん
12/02/23 01:19:16.26 .net
GlassFishの質問てここでいいのかな。

421:デフォルトの名無しさん
12/02/24 03:27:42.33 .net
no

422:デフォルトの名無しさん
12/03/17 10:54:20.81 .net
>>246
>なんでいつも質問した後は簡単に見つかるんだろう…
安心しろ
それはRubber Duckingと言って有名なテクニックだ
URLリンク(www.aoky.net)

423:デフォルトの名無しさん
12/03/18 06:42:47.35 .net
wxPythonで使える俺俺モジュールの作り方を教えてくだされ

424:デフォルトの名無しさん
12/03/23 11:08:49.75 .net
サイザーage

425:デフォルトの名無しさん
12/03/23 11:24:00.67 .net


426:デフォルトの名無しさん
12/04/30 23:02:22.27 .net
hoshu

427:デフォルトの名無しさん
12/05/07 23:39:02.10 .net
wxFormBuilderで出力したコードで日本語が文字化けすると思ったら
BOMなしUTF8とVSの問題だった

428:デフォルトの名無しさん
12/05/19 11:47:34.43 .net
Windows, Linux環境で使えるアプリを作っているのだが
Windowsの場合はバイナリを配布すればいい
Linuxの場合はソース互換だからソースを配布するべきなんだよな?

429:428
12/05/19 11:51:05.86 .net
あとwx2.9をFedora15 x86_64でビルドしてインストールしたんだが
なぜか実行時にwxCSConvでコケる。同じ症状の方おまへんか~?
この現象はwx2.8では起きてない。

(gdb) backtrace
#0 0x000000000079c785 in wxCSConv::DoCreate() const ()
#1 0x000000000079d7bd in wxCSConv::wxCSConv(wxFontEncoding) ()
#2 0x000000000079dacd in wxGet_wxConvLocalPtr() ()
#3 0x00007ffff3a79018 in _GLOBAL__sub_I_strconv.cpp () from /usr/local/lib/libwx_baseu-2.9.so.3
#4 0x0000003c4400e2b6 in call_init.part.0 () from /lib64/ld-linux-x86-64.so.2
#5 0x0000003c4400e393 in _dl_init_internal () from /lib64/ld-linux-x86-64.so.2
#6 0x0000003c440016ca in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
#7 0x0000000000000001 in ?? ()
#8 0x00007fffffffe815 in ?? ()
#9 0x0000000000000000 in ?? ()

430:デフォルトの名無しさん
12/06/13 22:49:56.47 .net
EVT_CLOSE に対して Close(True) しても終了出来ません

431:デフォルトの名無しさん
12/06/25 07:17:22.37 .net
URLリンク(cametan-001.tumblr.com)

432:デフォルトの名無しさん
12/07/04 17:16:02.11 .net
ほす
URLリンク(www.youtube.com)


433:デフォルトの名無しさん
12/07/05 16:29:10.99 .net
URLリンク(mikunchu.wiki.fc2.com)

434:デフォルトの名無しさん
12/07/05 16:30:39.73 .net
wxWidgetsでShift_JISからUTF-8変換
URLリンク(nantonaku-shiawase.hatenablog.com)

wxNotebookとwxAuiNotebookの違い
URLリンク(nantonaku-shiawase.hatenablog.com)


435:デフォルトの名無しさん
12/07/08 23:42:42.45 .net
>>430
EVT_CLOSEのハンドラの処理では終了処理した後event.Skip(false);
Closeを呼ぶとまたハンドラが呼ばれる

436:デフォルトの名無しさん
12/07/09 07:12:24.08 .net
URLリンク(wxpython.org)
You should check whether the application is forcing the deletion of the window
using CanVeto(). If it returns False, you must destroy the window using wx.Window.Destroy.
If the return value is True, it is up to you whether you respond by destroying the window or not.
For example you may wish to display a message dialog prompting to save files or to cancel the close.

437:デフォルトの名無しさん
12/07/13 19:00:38.12 .net
ソースに
  const char sjis[3] = {0x88, 0xa2, 0x00};
  wxString s(sjis, wxCSConv(wxT("CP932")));
  cout << s.mb_str(wxConvUTF8) << endl;
という部分があるとリンク時に下のようなエラーになります。

"hoge.sln" (Rebuild target) (1) ->
(hoge:Rebuild target) ->
  hoge.obj : error LNK2001: 外部シンボル ""class wxMBConvUTF8 & wxConvUTF8" (
?wxConvUTF8@@3AAVwxMBConvUTF8@@A)" は未解決です。
  hoge.obj : error LNK2001: 外部シンボル ""public: static unsigned int const
wxStringBase::npos" (?npos@wxStringBase@@2IB)" は未解決です。
  ..\hoge.exe : fatal error LNK1120: 外部参照 2 が未解決です。

何が足りないのでしょう?


438:デフォルトの名無しさん
12/07/13 20:37:03.69 .net
ヘッダファイルの読み込みかライブラリのリンクを行ってない

VC++なんて捨ててMinGWでやろうぜ!
MinGW + EclipseCDTで環境用意すればいい

439:デフォルトの名無しさん
12/07/13 20:49:50.67 .net
どのライブラリが足りないのか判らないんで
どのライブラリに含まれているかを教えろ

440:デフォルトの名無しさん
12/07/13 21:49:44.49 .net
>103-

URLリンク(diary.imou.to)

441:デフォルトの名無しさん
12/07/14 23:52:18.18 .net
c++とwxWidgetsを勉強中です。
わからないことがあるので教えていただけませんか。

void functestFrame::OnButton2Click(wxCommandEvent& event)
{
wxString str1 = L"まっぎょ";
functestFrame::wxStringfunc(&str1);
}
void functestFrame::wxStringfunc(wxString* str)
{ wxMessageBox(*str);}

4-10はコンパイルと実行できました。

void functestFrame::OnButton3Click(wxCommandEvent& event)
{
wxArrayString temp1;
temp1.Add(wxT("ぽけもん"));
functestFrame::wxArrayStringfunc(&temp1);
}
void functestFrame::wxArrayStringfunc(wxArrayString *arraystring)
{
for (int i=0 ; i< *arraystring.GetCount() ; i++)
{*arraystring.Item(i);}
}
コンパイルエラーがでます。
C:\Users\x\Desktop\functest\functestMain.cpp||In member function 'void functestFrame::wxArrayStringfunc(wxArrayString*)':|
C:\Users\x\Desktop\functest\functestMain.cpp|169|error: request for member 'GetCount' in 'arraystring', which is of non-class type 'wxArrayString*'|
C:\Users\x\Desktop\functest\functestMain.cpp|170|error: request for member 'Item' in 'arraystring', which is of non-class type 'wxArrayString*'|
||=== Build finished: 2 errors, 0 warnings (0 minutes, 1 seconds) ===|

wxstringと同じ方法をしているつもりなのですが、どのようにすればコンパイルができるのでしょうか?

442:デフォルトの名無しさん
12/07/15 11:07:19.04 .net
>>441
ちょっとしたコードを書いてみた
URLリンク(pastebin.com)

コンパイルが通らない原因

wxArrayStringの通常変数とポインタ変数の違いがわかっていない
C++では実体に対しては「.」でアクセス、ポインタ変数に対しては「->」アロー演算子でアクセスする
参考:URLリンク(brain.cc.kogakuin.ac.jp)

× arraystring.GetCount();
○ arraystring->GetCount();


あと関数の入り口で「wxArrayString *arraystring」と宣言されているならば
その関数内部では「*arraystring」ではなく「arraystring」でアクセスする
「*」をつけてしまうと「arraystring」のポインタのポインタになってしまう

void functestFrame::wxArrayStringfunc(wxArrayString *arraystring)
{
  for (int i=0 ; i< *arraystring.GetCount() ; i++)
   {*arraystring.Item(i);}                   ← ここもいまいち何をしようとしてるかわからん
}

443:デフォルトの名無しさん
12/07/15 11:14:03.55 .net
あと細かいことを言うと文字列の宣言を以下のようにしているようだが

wxString str1 = L"まっぎょ";

せっかく用意されているので「wxT」マクロを使った方がいい

wxString str1 = wxT("まっぎょ");

これでどのような環境でも日本語が変数に入れられるはず

444:デフォルトの名無しさん
12/07/15 21:32:47.77 .net
>>442
ありがとうございます。
サンプルをコンパイルして、実行できました。

通常変数と、ポインタ変数ですか。
リンク先を読んで理解します。

すみません、あと一点教えてください。

wxStringは、通常変数? wxArrayStringは、ポインタ変数?を利用しているというころでしょうか?

下記マニュアルをどのように調べればよいのでしょうか?
URLリンク(wxwindowsjp.sourceforge.jp)
URLリンク(wxwindowsjp.sourceforge.jp)



445:デフォルトの名無しさん
12/07/16 05:30:47.00 .net
>>444
>wxStringは、通常変数? wxArrayStringは、ポインタ変数?を利用しているというころでしょうか?

C/C++ではクラスや変数の宣言時に実体を宣言するかポインタで宣言するか決められるので
その質問はそもそもちょっとポイントがずれている

【ポインタ】
例えば
wxButton *btn1 = new wxButton(panel, wxID_BUTTON1, wxT("ボタン1"));

はwxButtonクラスをポインタ変数で宣言している
*btn1内のクラスメソッドをいじるには「*btn1->GetLabel();」と書く必要がありますよ、と
普通は大きなクラスはポインタ変数でインスタンスを作って宣言したほうが良い

【実体】
wxString myTestStr;
myTestStr = wxT("テスト文字列");
myTestStr.IsEmpty();  ← 空文字であるかどうか調べてる

>下記マニュアルをどのように調べればよいのでしょうか?

もうお気づきかもしれないが
URLリンク(wxwindowsjp.sourceforge.jp)に載っているのは
wxStringという「クラス」についてのリファレンス
wxString::Hogehoge のように「::」がくっついた後半部分がそのクラスが使用出来るメソッド(関数)

myTestStr.IsEmpty();  ← wxStringのIsEmptyというメソッドをつかっている

自分が欲しい機能をクラスリファレンスで探し、クラスを宣言してどのように使えるかは
メソッド部分を見れば良いということ。

446:デフォルトの名無しさん
12/07/16 07:23:17.68 .net
DLLよりもstaticの方が配布サイズ小さくなるな

447:デフォルトの名無しさん
12/07/16 10:56:52.47 .net
逆でわ?

448:デフォルトの名無しさん
12/07/16 11:06:12.02 .net
DLLリンクで作るともちろんexeは小さくなるけど
DLLも一緒に配布するとなるとでかくなるって意味

449:デフォルトの名無しさん
12/07/16 11:08:34.14 .net
そりゃあんたのプログラムの規模が小さいだけでわ?

450:デフォルトの名無しさん
12/07/16 11:12:44.68 .net
いや先入観無しで聞いてくれ
最初はそう思ってたんだが
確かにDLLリンクで作るとexeはめっちゃ小さい
しかし実際そこそこの規模のプログラム書いて
staticで作ってみて出来たexeが
(前者のexeに必要なDLLを合わせたサイズに比べると)
意外と小さい

451:デフォルトの名無しさん
12/07/16 11:15:19.52 .net
exe だけ配布汁!

452:デフォルトの名無しさん
12/07/16 11:22:57.42 .net
そりゃDLLはwxWidgets全部入りだしな

453:デフォルトの名無しさん
12/07/16 12:51:54.82 .net
規模によるとしか言いようがない

454:デフォルトの名無しさん
12/07/16 12:57:22.32 .net
MFC 最強ですねわかります

455:デフォルトの名無しさん
12/07/16 13:25:13.34 .net
DLLはwxWidgetsのシンボル全部入ってるけど、
staticリンクだと本体が使うシンボルだけ.aから
引っ張ってくるんだから、そうなるのは当たり前

456:デフォルトの名無しさん
12/07/16 14:12:18.33 .net
規模によるとしか言いようがない

457:デフォルトの名無しさん
12/07/16 14:13:00.02 .net
DLL ってなんのためにあるんだっけ?

458:デフォルトの名無しさん
12/07/16 14:13:47.36 .net
ワロタ

459:デフォルトの名無しさん
12/07/16 14:34:56.55 .net
wxWidgetsで作ったexeが一個(あるいは少数)しかないときはそうなるのは当たり前。
DLLのメリットが生きるのはOS等のようにexeが無数にあってさらに共通部分(API)が多い場合。
趣味でやってるならSTATICでいいんじゃね?

460:デフォルトの名無しさん
12/07/16 14:56:37.82 .net
めずらしくwxWidgetsスレが伸びている・・・

461:デフォルトの名無しさん
12/07/16 15:55:58.62 .net
規模によるとしか言いようがない

462:デフォルトの名無しさん
12/07/16 15:56:38.27 .net
2.9.4 出たからな

463:デフォルトの名無しさん
12/07/16 16:19:03.02 .net
2.9.4 はまだ Development だよね。

いつ Stable になるんだよ、まったく。

464:デフォルトの名無しさん
12/07/16 16:28:29.73 .net
馬鹿には無理

465:デフォルトの名無しさん
12/07/16 17:57:49.06 .net
馬鹿には無理さんは帰って、どうぞ

466:437
12/07/16 19:32:54.08 .net
事故解決しました。
リンカ設定ではディレクトリで vc_dll の方を指定していたのですが、
PreprocessorDefinitions に WXUSINGDLL が抜けていたため、
static link しようとしてシンボル未解決になっていたようです。

467:デフォルトの名無しさん
12/07/16 19:53:09.82 .net
URLリンク(wiki.wxwidgets.org)

468:デフォルトの名無しさん
12/07/16 19:55:20.02 .net
そうそう。
それです。

469:デフォルトの名無しさん
12/07/17 23:59:29.64 .net
>>445
レスありがとうございます。
>>その質問はそもそもちょっとポイントがずれている

ポインタ渡し、参照渡しを調べていたのですが、勘違いしていたようです。

int,charなどの型の場合・関数の場合・クラスの場合と大体は似ているようですが、
クラス内の機能を使用するときには、->を使わないとだめなことがなんとなくわかりました。

void functestFrame::OnButton2Click(wxCommandEvent& event)
{
wxString str1 = wxT("まっぎょ");
functestFrame::wxStringfunc(&str1);
}
void functestFrame::wxStringfunc(wxString* str)
{ wxMessageBox(*str);
str -> Last();}

教えてもらったとおりやると、コンパイルと実行ができ、str.Lastとやればコンパイルエラーがでました。

間接参照演算子の*strの使い方で勘違いしていました。
あくまで、データをみるだけで、クラス等のpointer渡しの場合かつその機能を使う
場合は、->を使うんですね。

ありがとうございました。


470:デフォルトの名無しさん
12/07/18 09:07:55.01 .net
全然違うw

C++の初心者用入門本読んで勉強汁

471:デフォルトの名無しさん
12/07/18 13:24:00.41 .net
wxWCharBuffer の使い方が良く判りません。

472:デフォルトの名無しさん
12/07/23 08:38:27.68 .net
過疎

473:デフォルトの名無しさん
12/07/23 13:34:00.85 .net
過疎かあ

474:デフォルトの名無しさん
12/08/10 14:24:37.30 .net
わからないことがあるので、教えてください。

URLリンク(fossies.org)
のソースの中で、149行目と150行目の : は何という演算子で、どのようなことをしているのでしょうか? 
149 MyFrame::MyFrame(wxFrame *frame, const wxString& title)
150 : wxFrame(frame, wxID_ANY, title, wxDefaultPosition, wxSize( 200, 100 ) )

149行目は、コンストラクターというのはなんとなくわかりますが、その後の演算子?がなにをしているのかが
わかりません。

検索しても、スコープ演算子はでてくるのですが、: 一個だけの演算子の意味がでてきません。

試しに、150行目に該当する部分をコメントアウトしてみると、ビルドは通りますが、実行しても何も表示されません。

{}の中に、 wxFrame(frame, wxID_ANY, title, wxDefaultPosition, wxSize( 200, 100 ) );を追加してビルドして
実行しても何も表示されません。








475:デフォルトの名無しさん
12/08/10 14:33:22.20 .net
すいません、リンク先の内容が質問したい内容と同じではありませんでした。

実際は、C:\wxWidgets-2.9.3\samples\sockets\client.cppの内容をビルドしながら理解しようとしています。

client.cpp
// frame constructor

MyFrame::MyFrame() : wxFrame((wxFrame *)NULL, wxID_ANY,
_("wxSocket demo: Client"),wxDefaultPosition, wxSize(300, 200))

ここのコンストラクタの後の、: の演算子?であっているのかどうかも不明なのですが・・・
これは何をしているのでしょうか?



476:デフォルトの名無しさん
12/08/10 14:58:02.41 .net
>>475
MyFrameは多分継承したクラスなので、基底クラスであるwxFrameのコンストラクタを呼び出している。

477:デフォルトの名無しさん
12/08/10 14:59:37.21 .net
あげちゃった・・・。Orz

478:デフォルトの名無しさん
12/08/10 15:15:07.17 .net
>>476

教えてくれてありがとうございます。
継承と基底クラスを調べてみます。


479:デフォルトの名無しさん
12/08/10 16:12:34.61 .net
若き日のヴィドゲンシュタインがよみがえったように


480:デフォルトの名無しさん
12/08/10 16:21:56.40 .net
連結グラフ G=(V,E) と重み d:E->R+が与えられたとき 最小木を求めよ。

481:デフォルトの名無しさん
12/08/14 17:06:28.44 .net
演算子?ではありませぬ

482:デフォルトの名無しさん
12/08/28 18:53:02.77 .net
初期化リストじゃね?

483:デフォルトの名無しさん
12/08/31 17:18:28.13 .net
wxStaticBitmapに透過png画像を指定して描画しても、
透過になってくれてないようなのですが、
単にwx.BITMAP_TYPE_PNGで読んだものを貼るだけじゃ駄目なんでしょうか?

484:デフォルトの名無しさん
12/08/31 18:43:26.98 .net
wxInitAllImageHandlers() の呼び忘れや
png を作成したソフトが原因で正常に透過処理されないとかかなあ
サンプルのimage参考にするといいと思うよ

485:デフォルトの名無しさん
12/08/31 22:09:21.20 .net
wxPython in action の翻訳版が・・・
URLリンク(www.slideshare.net)


486:デフォルトの名無しさん
12/08/31 23:26:46.41 .net
スライド565ページって、出版じゃないのかー。
それでも俺は原書を選ぶぜ。

487:デフォルトの名無しさん
12/08/31 23:48:10.30 .net
webはスライドだけど
savefileボタン押したら
普通にPDFが落ちて来た

488:デフォルトの名無しさん
12/09/01 02:49:55.50 .net
・wxAuiPaneInfoで、一度設定したCaptionをCaptionVisibleのtrue, falseで切り替えたいけど
なぜか反映されん、なんでだぜ

wx 2.9.4使ってみた

・GTK環境 wx2.8でSetSizer呼んだ後Fit呼ぶと異常終了するバグが2.9.4では直ってた
・同じくGTK環境 wxListctrlでwxLIST_AUTOSIZEしても、自動でカラムの幅が調整されない
(なんかメーリス見たらwxPythonのロビンさんが「まだ直ってないの?」みたいなこと書いてた。誰か直して。)

489:デフォルトの名無しさん
12/09/01 04:53:40.84 .net
GTKは糞

490:デフォルトの名無しさん
12/09/05 19:33:35.92 .net
GTK+ は多段タブも実現できんのだな
WindowsにできてGTKにできんことが結構見えてきた

ミゲルさんもこんなこと書いてるし、Linuxのデスクトップはダメだな
URLリンク(www.yamdas.org)

491:デフォルトの名無しさん
12/09/06 09:29:27.19 .net
>>489
またおまえか
巣に帰れ

492:デフォルトの名無しさん
12/09/06 09:57:24.07 .net
何度でも言うよ
欠かさず言うよ
GTKは糞

493:デフォルトの名無しさん
12/09/06 17:47:43.41 .net
>>492
おっさんなにやってん?

494:デフォルトの名無しさん
12/10/15 03:49:13.19 .net
eNprdGhEhnH6XMi8RgcFfQj71L1t6+FS
Cvr6jXc0G/c3BgLhfriwvl5No4NejUJz
LpIZQVwwPY0OQOkaBSBnDlRujgKYC4ZQ
ZfoKYGVzkkEcDYX4xjnxmo0OzXUKU/L6
1jadbDo7bfP0uVwwA8FqG4MgjH01YAMa
A7kgNND1LQtgroC6Kb4xDiyr1BiAAjP1
9JpzFQBRXmeP

495:デフォルトの名無しさん
12/10/24 22:55:14.82 .net
大量削除の危機を生き延びたんだな

496:デフォルトの名無しさん
12/11/01 21:43:39.40 .net
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘

497:デフォルトの名無しさん
12/11/17 01:59:11.60 .net
hosh

498:デフォルトの名無しさん
12/11/18 17:34:28.86 .net
wxWidgetsって、gtkを呼び出す抽象的なレイヤになるの?

499:デフォルトの名無しさん
12/11/18 18:00:39.95 .net
OSとかbuildしたときの設定による
Windows版なら今は直接Win32API呼んでるはず

500:デフォルトの名無しさん
12/11/19 00:34:29.96 .net
>>498
抽象的なレイヤって言い方が引っかかるけど
どのプラットフォームでも同じコードで動くよ

501:デフォルトの名無しさん
12/11/19 02:31:32.83 .net
gtkを呼び出す抽象的なレイヤなんてないよ

502:デフォルトの名無しさん
12/11/20 14:03:35.35 .net
wxGtkって何なんだ?

503:デフォルトの名無しさん
12/11/20 14:05:16.89 .net
具象的

504:デフォルトの名無しさん
12/11/20 16:40:02.72 .net
gtkをwxWidgetのバインディングで呼出してんだから抽象的じゃないの?
具象的だと日本語おかしくね?

505:デフォルトの名無しさん
12/11/20 16:46:58.65 .net
gu
taite
ki

506:デフォルトの名無しさん
12/11/22 21:38:02.68 .net
>>505
はいはいワロス

507:デフォルトの名無しさん
12/11/22 23:26:03.48 .net
>>506
ひでー

508:デフォルトの名無しさん
13/01/10 03:31:25.47 .net
>>492
何度も言うよ
残さず言うよ
だろ
>>493
中途半端なつっこみするなら黙ってろよムズムズする

509:デフォルトの名無しさん
13/01/10 07:36:12.49 .net
何度でも言うよ
欠かさず言うよ
GTKは糞

510:デフォルトの名無しさん
13/01/10 16:50:22.28 .net
マイナーGUIスレを見たけど、以前はFOXが人気だったんだね
まだ息してるのかな

511:デフォルトの名無しさん
13/01/10 16:53:16.15 .net
今はもう、QtかWxWidgetsの二択にしか見えない。気のせい?

512:デフォルトの名無しさん
13/01/11 08:37:58.62 .net
FortranプログラムのGUIシェルをwxWidgetsで作ろうとsampleのexecを改造しているけれどよくわからない。
いい本ないでしょうか。
最近wxPythonの本が出ましたがパイプまでは書いていないので…

513:デフォルトの名無しさん
13/01/11 09:01:20.21 .net
eNprdGhEhnH6XMi8RgcFfQj71L1t6+FS
Cvr6jXc0G/c3BgLhfriwvl5No4NejUJz
LpIZQVwwPY0OQOkaBSBnDlRujgKYC4ZQ
ZfoKYGVzkkEcDYX4xjnxmo0OzXUKU/L6
1jadbDo7bfP0uVwwA8FqG4MgjH01YAMa
A7kgNND1LQtgroC6Kb4xDiyr1BiAAjP1
9JpzFQBRXmeP

514:デフォルトの名無しさん
13/01/13 12:10:17.65 .net
64bit版MinGWでwxWidgetsコンパイルしてるけど
作ったバイナリが起動すらしないので死にそう

515:デフォルトの名無しさん
13/01/14 01:59:27.93 .net
コンパイルできた
64bitネイティブアプリや、どや

516:デフォルトの名無しさん
13/01/15 01:35:39.03 .net
windows7を使用しています。

URLリンク(wiki.wxwidgets.org)
を参考に拡張子が、csvとtxtのファイル名のみを取得しようとしています。

wxDir::GetAllFiles(dir , &filename ,wxT("*.txt"));
wxDir::GetAllFiles(dir , &filename ,wxT("*.csv"));
filespecが一つのときは指定拡張子のみ取得できます。

wxDir::GetAllFiles(dir , &filename ,wxT("*.csv;*.txt"));
2個指定すると何も取得されません。

指定方法が悪いと思うのですが、どのようにすればいいのでしょうか?
教えてください。

517:デフォルトの名無しさん
13/01/15 06:14:19.90 .net
URLリンク(trac.wxwidgets.org)

518:デフォルトの名無しさん
13/01/15 06:31:29.95 .net
分からないならレスしないでください

519:デフォルトの名無しさん
13/01/15 17:15:14.30 .net
>>517
レスありがとう。
一つしかサポートされないのですね。

ありがとうございました。

520:デフォルトの名無しさん
13/01/16 15:50:20.31 .net
なんで
URLリンク(wiki.wxwidgets.org)
を参考にすると
wxDir::GetAllFiles(dir , &filename ,wxT("*.csv;*.txt"));
が出てくるんだろ
基地外か

521:デフォルトの名無しさん
13/01/16 23:31:49.99 .net
wxWidgetsを使おうとしてる時点でオカシイのだ(・∀・)

522:デフォルトの名無しさん
13/01/17 18:18:55.83 .net
童貞乙

523:デフォルトの名無しさん
13/01/19 07:42:35.24 .net
この道はいつか来た道♪ああ そうだよあかしやの花が咲いてる

524:デフォルトの名無しさん
13/01/20 02:49:05.26 .net
windowsで変な抽象レイヤなんて触るなら、c#使った方がマシ

525:デフォルトの名無しさん
13/01/21 20:07:51.79 .net
wxRubyでWindowsのイベントを捕まえたいのですがどのようにすれば出来ますか?
C++なんかだとMSWWindowProcをオーバーライドすることで出来るみたいですが
wxRubyには見あたらないような・・・

526:デフォルトの名無しさん
13/01/21 23:44:55.73 .net
Ruby を Windows で使う人って()

527:デフォルトの名無しさん
13/01/21 23:59:56.58 .net
【ActiveScript】RubyをWindowsで使うスレ【GUI】
スレリンク(tech板)

528:デフォルトの名無しさん
13/01/23 01:57:17.09 .net
>>521
MFCを直に触りたくないとき、他に候補なんてある?

529:デフォルトの名無しさん
13/01/23 04:51:35.91 .net
Qt

530:デフォルトの名無しさん
13/01/23 07:01:30.47 .net
CLX, GTK+, Qt, Tk, FLTK, FOX

C言語/C++ベースおよびマルチ言語ベース
ウィジェット・ツールキット - Wikipedia

531:デフォルトの名無しさん
13/01/23 07:03:10.89 .net
Agar
CEGUI
GLUI
Juce
Ultimate++
Visual Component Framework (VCF)
YAAF

532:デフォルトの名無しさん
13/01/30 12:24:11.63 .net
MFCならWindowsのみで動けばいいんだろ

WTL
OWLNext

533:デフォルトの名無しさん
13/01/31 05:40:10.73 .net
このひとまた変な本出してるな
URLリンク(www.amazon.co.jp)
このひとの他の本酷かったから買うつもり無いけど

534:デフォルトの名無しさん
13/02/28 14:11:47.04 .net
またバグを発見してしまった

URLリンク(docs.wxwidgets.org)

wxInputStream::LastRead
size_t LastRead() const

LastReadをlinuxで使うと常に0で返ってくる。
6年前に修正されてるはずだけどbranchに入ってないからバグったまんまですかVZさん。。。

535:デフォルトの名無しさん
13/02/28 14:13:49.27 .net
チケットは以下

URLリンク(trac.wxwidgets.org)

536:デフォルトの名無しさん
13/02/28 14:15:06.81 .net
そうか、 2.8のブランチには入ってるけど2.9には反映されてないのか、どちらにせよだめぽ

537:デフォルトの名無しさん
13/03/01 00:54:34.59 .net
wxInputStreamなんて使わんから

538:デフォルトの名無しさん
13/03/01 01:16:17.90 .net
馬鹿には無理

539:デフォルトの名無しさん
13/03/01 08:18:29.29 .net
wxWidgets は正規表現とか、
文字コードの変換がいまいち信用出来ないので、
window のフレームワークだけに使って、
基本的なロジックは boost とかで済ますのが正解。

540:デフォルトの名無しさん
13/03/16 15:59:13.75 .net
wxwidgetsのListCtrlのカラムに直接描画したいんだけどどうしたらいい?
具体的には、ダウンローダなどによくあるようなダウンロード状況を表す
横棒のグラフに%が表示されてるような奴なんだけど

541:デフォルトの名無しさん
13/03/16 16:03:03.35 .net
馬鹿には無理

542:デフォルトの名無しさん
13/03/31 11:08:01.89 .net
ググったら>>64がヒットした。
x64のgcc4.7以降でソースからコンパイルすると途中でcc1plusが止まった
x64のvc9じゃ止まらない。更新途絶えてるから修正期待するのは無理か

543:デフォルトの名無しさん
13/03/31 13:02:54.41 .net
>>64
>>542

共有ライブラリもしくはモノリシックライブラリをビルドする場合、公式のMinGWだとメモリを使い果たしてしまう
TDM-GCCに切り替えた上で CXXFLAGS='-fno-keep-inline-dllexport' を付けて configure実行するよろし

これはwxWidegts側のバグと言うよりもMinGWのバグだ

544:デフォルトの名無しさん
13/04/01 01:17:29.35 .net
>>543
あらゆるオプションくっつけてもダメだった
FLTKはvcでもgccでも問題なかったんだけどな、これgccじゃなくてmingw側の問題なのか

545:デフォルトの名無しさん
13/04/01 01:21:48.05 .net
wxWidgetsってVisualStudio2012で動く?

546:デフォルトの名無しさん
13/04/01 05:07:51.79 .net
>>545
普通にVS2012でビルドして使ってるよ

547:デフォルトの名無しさん
13/04/01 07:42:14.94 .net
昨晩発見、mingw-w64-dgnってトコのパッチ当てたらx64MinGWでもビルド出来た。
gccはTDM4.7.1、時間が無いのでconfigureのオプションくっつけて無いけど一発で通った

具体的には、textentry.cppの#include <shlguid.h>を削除するだけ

548:デフォルトの名無しさん
13/04/04 14:07:26.83 .net
ハードディスクのMBR領域をバックアップしたいんだけど
どうやってプログラム書いたらいいかな

Linuxのときは/dev/sdaを開いて読むだけだったけど
Windowsとコード一緒にできない

549:デフォルトの名無しさん
13/04/04 14:19:00.69 .net
共通の方法は無いかって話?

550:デフォルトの名無しさん
13/04/04 15:10:10.41 .net
dd.exe のソース見ると良い

551:デフォルトの名無しさん
13/04/04 15:49:15.97 .net
そうするわ
でもパスカルわかんねーんだよな・・・

552:デフォルトの名無しさん
13/04/04 16:02:05.02 .net
wxWidgets 関係の話?

553:デフォルトの名無しさん
13/04/09 09:13:04.65 .net
wxPythonなんですがベジエ曲線を書くにはどうすれば良いですか?

554:デフォルトの名無しさん
13/04/09 18:52:10.99 .net
描画系クラスならwxDC使えばいいんじゃないかなあ
URLリンク(docs.wxwidgets.org)

555:デフォルトの名無しさん
13/04/10 11:56:17.56 .net
出来ました
ありがとうございました
URLリンク(docs.wxwidgets.org)

556:デフォルトの名無しさん
13/06/24 15:12:38.36 .net
Latest Development Release: 2.9.4
Current Stable Release: 2.8.12
Previous Stable Release: 2.6.4
URLリンク(www.codeproject.com)

557:デフォルトの名無しさん
13/06/26 18:58:08.93 .net
Mac OSX LionだとwxWidgets 2.8 がビルドできない・・・
wxWidgets 2.9ビルドするとダイナミックリンクライブラリが一部作成されない・・・
Mac PortのwxWidgets-devをダウンロード するのが一番良さげ

あとMac OSXでpthreadをバイナリにリンクさせたらいきなり実行ファイルが落ちやがる
罠多すぎだろあのOS

558:デフォルトの名無しさん
13/06/26 19:01:52.04 .net
URLリンク(www.HackInt0sH.org)

559:デフォルトの名無しさん
13/07/17 NY:AN:NY.AN .net
wxWidgets-2.9.5では>>429で言ってたバグが直ってるぞ、やったぜ

560:デフォルトの名無しさん
13/08/24 NY:AN:NY.AN .net
wxってlispで使えますか?

561:デフォルトの名無しさん
13/08/24 NY:AN:NY.AN .net
馬鹿Lisperには無理

562:デフォルトの名無しさん
13/08/24 NY:AN:NY.AN .net
lispなんて使ってかっこつけやがって

563:デフォルトの名無しさん
13/08/30 NY:AN:NY.AN .net
みなさんお世話になりました
明日で2ch終了らしいので
今のうちに最後のご挨拶をしておきます

564:デフォルトの名無しさん
13/08/31 NY:AN:NY.AN .net
wxWidgetsのコミッタのVadim ZeitlinがC++11でwxWidgets書いてるぞ

wxWidgets and C++ 11
URLリンク(wxwidgets.blogspot.com)

565:デフォルトの名無しさん
13/08/31 NY:AN:NY.AN .net
時既におすし

566:デフォルトの名無しさん
13/09/06 17:26:06.71 .net
URLリンク(chrome.blogspot.jp)
URLリンク(itpro.nikkeibp.co.jp)
URLリンク(news.mynavi.jp)
URLリンク(internet.watch.impress.co.jp)

567:デフォルトの名無しさん
13/09/06 23:08:20.72 .net
>>566
昔から何度も提唱されてるブラウザによる全てのGUIの描画ですか
Googleは達成できるか

568:デフォルトの名無しさん
13/09/11 00:44:38.34 .net
Firefoxって知ってる?

569:デフォルトの名無しさん
13/09/20 22:19:19.81 .net
mozillaに出来なくともgoogleになら出来る

570:デフォルトの名無しさん
13/10/10 10:11:38.40 .net
wcSVG

571:デフォルトの名無しさん
13/10/16 23:19:09.83 .net
3.0.0-RC1

572:デフォルトの名無しさん
13/10/17 08:33:10.45 .net
wxD

573:デフォルトの名無しさん
13/10/17 12:18:17.29 .net
>>572
どうしてるんだろうな
そのプロジェクト...

574:デフォルトの名無しさん
13/10/20 16:58:10.15 .net
wxTcl

575:デフォルトの名無しさん
13/11/05 22:48:07.34 .net
3もRC2まで行ってるし、次は今月中に正式版出るかな

576:デフォルトの名無しさん
13/11/05 23:10:06.75 .net
出たとしたらLinuxのパッケージにwx-3.0が出て使えるようになる
楽しみ

577:デフォルトの名無しさん
13/11/13 21:36:52.45 .net
3.0.0キテタ━ヾ(゚∀゚)ノ━!!

578:デフォルトの名無しさん
13/11/14 22:26:30.66 .net
おいおい3.0だぞ?出たんだぞ?なんでこんなに盛り上がんないんだよ…

579:デフォルトの名無しさん
13/11/14 23:36:17.18 .net
メインの機能追加がUnicode対応だからなぁ
今までも別に日本語使えなかったわけではないし

580:デフォルトの名無しさん
13/11/14 23:52:35.30 .net
何言ってだこいつ
unicodeは前から使えてるっての

所感
・Mac向けビルドの安定化
・wxwebviewが全ポートで使える
→ ネットワーク接続して、html, Javascriptの解釈可能に
・aui系のバグ修正と見た目の品質向上
・c++11, clang対応
・その他即死系のバグ修正

間違ってたらすまん
とりあえず2.9で出てたバグは直ってるはず

581:デフォルトの名無しさん
13/11/15 00:03:58.47 .net
あと>>364で出てたUTF-8以外の文字列からの変換とかどうなったんだろ
うまく変換できてるなら嬉しいけど

その他にもクラスは2.8の時より増加してるよね

582:デフォルトの名無しさん
13/11/15 00:55:39.31 .net
MinGW gcc + wxWidgets 2.8.12で作っていたプログラムを3.0.0で作り直したら、
ウィンドウリサイズ時のwxStaticText、wxCheckBox、wxListBoxのフリッカーが見るに耐えんレベルになった。
かと言ってSetDoubleBufferを使うとリサイズがモタつく上に、何故かwxRadioBoxの枠線が消えるんだよなー。
仕方ない、一つ一つwxEVT_ERASE_BACKGROUNDを潰す作業を初めるか…。

583:デフォルトの名無しさん
13/11/15 03:59:07.98 .net
gcc4.8で動くなら使う
x86_64-w64-mingw32じゃ、2.9はとうとうビルドさえ無理だった

584:デフォルトの名無しさん
13/11/15 04:14:31.91 .net
4.8だとやっぱりcc1plusが停止した、しかも2.9と同じファイル
公式から落としてきたライブラリ使ってもリンクに失敗
4.7ならライブラリのビルドもリンクも問題なし

585:デフォルトの名無しさん
13/11/15 05:11:08.20 .net
あ、やっぱ出来た
パラレル無しでビルドするか>>543
CXXFLAGS='-fno-keep-inline-dllexport'
をつけると大丈夫みたい、後者だと1度止まるけど再ビルドすれば通るしサンプルもビルド出来た

586:デフォルトの名無しさん
13/11/15 06:44:39.98 .net
連投失礼、>>584-585は見なかった事にしてね
当方の環境、win7 64bit msys上からビルド、gccは4.9、静的リンクでビルド

configureにCXXFLAGS="-fno-keep-inline-dllexport"をつけてもevent.cppで止まる
その時あらためてmake CXXFLAGS="-fno-keep-inline-dllexport"としてビルドすると通る

gcc4.8だと2.9はビルドでこけるしリンクも失敗するってのは国内外でよく見かけたし、実際俺も
あきらめてたけど…ひょっとして2.9もこの方法で通ったのかなあ。

でも、なぜかサンプルのimage.exeだけ強制終了した(ビルドは可能)

587:デフォルトの名無しさん
13/11/15 07:29:00.37 .net
VCでやったほうが実行速度速くなるんじゃないの

588:デフォルトの名無しさん
13/11/15 07:40:36.25 .net
VC++?知らない子ですね…

589:デフォルトの名無しさん
13/11/15 07:53:20.59 .net
損してると思うよ

590:デフォルトの名無しさん
13/11/16 00:14:03.66 .net
constexprも使えないコンパイラは要らないんですよ

591:デフォルトの名無しさん
13/11/16 00:58:40.41 .net
メタプログラミングって奴でしょ?
何が何だかサッパリ分からないよー。
つまり俺にはまだ早い代物だという事は承知してるが、
どういう用途で使うものなのか教えてほしい。

592:デフォルトの名無しさん
13/11/16 03:33:03.68 .net
wxと同時に浸かって委員会

593:デフォルトの名無しさん
13/11/16 03:39:24.39 .net
GCC3xの頃はvc++の方が速かった気がするけど、4.6から急激に速度が向上した気がする
あくまで自作プログラムでの話だけどね
ただ、gccでビルドされる様々なテストプロブラム見てるとvc++でビルドって安全性って意味
でヤバいんじゃないかって思っちゃうの

594:デフォルトの名無しさん
13/11/16 04:27:47.92 .net
>>591
実行時の計算オーダーを減らす機能。事前計算機能だね。
コンパイルタイムにできるだけ計算して結果を出しておくことで実行時の計算量を減らす。
ネットの変人がそれでレイトレーシングやったりしてる。
C++14のやつはそれなりに簡単だよ。

595:590
13/11/16 09:47:07.37 .net
>>590はちょっと冗談気味だが
正直VC++はC++とは言えない
C++の機能を最大限活かす/楽しむにはgccやclangを使うべきだと思います
会社でプログラム書けと依頼されたらもしかしてVC++使うかもしれないけど

596:デフォルトの名無しさん
13/12/28 16:23:57.98 .net
chrome のブックマークバー、 IE のお気に入りバーのようなコントロールクラスを探しています。
全てのアイテムが編集可能でアイコンとテキストが表示されて
そのアイテムの値のテキストを編集できるメニューを作りたいのですが
最適なコントロールクラスはどれか教えてください。

wx.Menu を使おうと思ったのですが、
右クリックやコンテキストメニューのイベントが Bind しても呼び出されず苦戦しています。

wx.ListCtrl を使った場合は右クリックのイベントは受けられるのですが、
左クリックのイベントが wx.EVT_COMMAND_LEFT_CLICK のみで
これは MS Windows のみと書いてあるのでできたら使いたくありません。
これらのイベントについても誤りがあれば教えて欲しいです。

環境は wxPython 2.8-msw-unicode です。
よろしくお願いします。

597:デフォルトの名無しさん
13/12/28 17:54:40.37 .net
>>596
理想の実装になるかわからない&C++しかわからないが
wxMenuをそのまま使うのが良いと思います

実装の骨子
・メニューの項目一つ一つにwxWindowID ( enum )を振る
・wxWindowIDはwxCommandEventで起動するようにしておく
・上記のwxCommandEventを処理する関数はenumをswitch文で処理する
・wxCommandEventはEVT_MENU_RANGEで定義しておく(enum値が 1000~1200の場合反応する関数を作るなど)

アイテムを編集可能にするために
・EVT_UPDATE_UIをwxMenuに設定しておき、ユーザーがメニューの項目を触ったら更新を実施

右クリック
・wxのConnectとかBindでwxMouseEventをくっつければいいと思う

-------------------------------------------------------

上記をやろうとすると、ユーザーが設定した項目でループを回して常に更新かける
感じになるんじゃないでしょうか。

wxMenu *menu = new wxMenu;
wxMenu *foo  = new wxMenu;

for ( ユーザーが設定した数だけループ ) {

foo->Append(wxID_HOGEHOGE_RANGE + i , wxT("ユーザー設定項目1"));
foo->Connect(); // 右クリックイベントを定義しておく
}

598:596
13/12/29 12:00:00.67 .net
>>597 レスありがとうございます。

wxMenu に対して Connect/Bind を試してみたのですが、
クリックイベントは wxEVT_MENU または wxEVT_MENU_RANGE だけが呼び出されました。

LEFT_UP, RIGHT_UP, COMMAND_LEFT_UP, COMMAND_RIGHT_UP, CONTEXT_MENU のイベントを試しましたが、
こちらは EVT_MENU の有無にかかわらず呼び出されませんでした。

試したソースコード : URLリンク(codepad.org)

wxEVT_MENU の際に右クリックか左クリックかわかれば処理を分岐できるのですが、
wxCommandEvent でクリックしたボタンの情報の取得方法がわかりません。

wxWindow::PopupMenu では wxMenu を参考にして GUI を作り出すようですが、
そこですでにイベントが途絶えているように思えてしまいます。
ウィンドウハンドルも得られないようだし、
ポップアップメニューにイベントを追加することはサポートされていないように感じます。

wx.ListCtrl でも思ったことなのですが、
wx.CommandEvent 系のイベントを使うコントロールクラスでは
wx.MouseEvent 系のイベントは関連付けられないのでしょうか?

599:デフォルトの名無しさん
13/12/29 12:26:46.93 .net
>>598
う~ん、メニュー上での右クリックは悲しいことにできなさそうね

[wx-users] Trapping wxMouse events over wxMenus
URLリンク(groups.google.com)

この会話の中で、Vadimさん(wxWidgetsのコミッタ)が無理やでとか言ってる
メニューの項目の中で右クリックするとイベントはメニューのほうに行ってしまう
から、そのイベントをつかむのは無理だと。
で、それはWindowsとGTKのネイティブ実装がそうなっているから。

> Ideally, I would like to be able to left-click and
> right-click WITHOUT the menu disappearing.
This is impossible under the two main platforms: MSW and GTK. Menus grab
the mouse when popped up (down?) and so all mouse events go to them.

600:デフォルトの名無しさん
13/12/29 12:34:09.46 .net
いや、ちょっと違うか
メニューの右クリックイベントは掴めるけど
その時呼び元のメニューの項目が消えるといってるのか

その解決策としてはwxMenuを使わずに
menuのウィジェットを自分でエミュレートするしかないとのこと

601:デフォルトの名無しさん
13/12/29 13:16:30.36 .net
>>599-600
ありがとうございました。
wxMenu を流用できないのは残念ですが、
これで踏ん切りがつけたので、 wxListCtrl を使ったものを試そうと思います。

引き続き、wxListCtrl のような wxControl 派生に対して
wxMouseEvent 系のイベントをつける方法を求めていますので
何か参考になることがありましたらよろしくお願いします。

602:デフォルトの名無しさん
14/01/27 14:20:14.73 .net
了解

603:デフォルトの名無しさん
14/01/27 14:35:57.41 .net
>>601 です。 >>596 について進展したので参考になればと思い報告します。

メニューアイテムの上で右クリックしてポップアップメニューを表示することが可能なクラスが wxPython にありました。
wx.lib.agw.flatmenu がまさにぴったりのクラスでした。
RIGHT_UP のイベントはありませんが、 FlatMenuItem::SetContextMenu(FlatMenu) で >>596 でしたいことが簡単にできます。
自作のために PopupWindow あたりを調べているときに見つけました。

また何かありましたらよろしくお願いします。

604:デフォルトの名無しさん
14/02/26 17:32:22.79 .net
サンプルが多すぎて逆にわからないのですが、
ランタイム時にGUIパーツを生成消滅させることって可能ですよね?
例えばユーザが読み込んだファイルによってボタンの数を変化させるなど

605:デフォルトの名無しさん
14/02/26 17:48:08.47 .net
マジレスすると
出来ますよ

606:デフォルトの名無しさん
14/02/26 18:02:12.58 .net
ありがとうございます
関連するサンプルなどありましたら教えていただけると幸いです

607:デフォルトの名無しさん
14/02/26 18:06:08.80 .net
きっと君のHDD(SSD)に既に入ってるよω

608:デフォルトの名無しさん
14/02/26 18:19:55.82 .net
そうなんですよね~でもsample多くてどっから見ればよいか、という感じです
まあできるということがわかればとりあえず見て回ります

609:デフォルトの名無しさん
14/02/26 18:34:00.97 .net
チュートリアルで最初の方から見ればすぐ出ると思う。

610:デフォルトの名無しさん
14/02/26 18:38:10.36 .net
デモ実行してみて自分の欲しい機能と似たものを見つけたら「ソースを見る」をクリック。

611:デフォルトの名無しさん
14/02/26 18:44:29.66 .net
すいません、見てるものが違うかもしれないので確認させてください
チュートリアルとは何を指してますか?
デモはdemosフォルダの中にあるプロジェクトですよね?「ソースを見る」とはなんでしょうか?

612:デフォルトの名無しさん
14/02/26 18:48:03.88 .net
ごめん。
見てるものが違った。
wxPython の方見てた。

613:デフォルトの名無しさん
14/02/26 18:53:20.95 .net
wxPythonのDemo見て目星を付けて
wxPythonのソースを参考にwxWidgetsでCソース書くのもあり

614:デフォルトの名無しさん
14/02/26 19:08:22.51 .net
なるほど
wxPythonでコードを書いたものがC++に直接変換できたりしたら便利ですね
wxGladeみたいに

615:デフォルトの名無しさん
14/02/26 20:20:43.75 .net
なんか久しぶりにwxスレが伸びてるぞ、新規ユーザー大歓迎
ボタンとかテキストエリアの動的な生成は、wxPanelとかwxSizerを使った簡単なサンプルを作ったら理解できると思う
言葉で説明するよりコード書いたほうがよいけど一応書いとく

例えばボタンを生成・削除しようとする場合
親Panelをparent, 子panelをchildとすると

1. ウィジェットの生成:parentをnewして、必要な分だけchildをnew
child = new wxPanel(parent, …);
...

2. ウィジェットの削除:parent.DestoryChildren();
この関数で子ウィジェットを全部きれいに削除できる

説明の意味がわからなければ、まずは適当なチュートリアルサイトに行くべし
おすすめ
URLリンク(zetcode.com)

616:デフォルトの名無しさん
14/02/26 20:22:35.51 .net
>>614
慣れたら直接C++で書けるから多分コンバータは需要無いよ

617:デフォルトの名無しさん
14/02/26 20:29:50.32 .net
>>615
詳しくありがとうございます
拝見致します

>>616
wxGladeも要りませんかね?
フローはwxGladeで枠を作って機能をC++で書く感じになるのかと

618:デフォルトの名無しさん
14/02/26 20:30:17.32 .net
そのくらい wx は良く出来てるね。

619:デフォルトの名無しさん
14/02/28 21:18:50.52 .net
Qt以下の品質。gtkならcで書けた。

620:デフォルトの名無しさん
14/03/01 00:37:16.59 .net
そらQtのほうがメジャーやろ、死ね

621:デフォルトの名無しさん
14/03/01 01:40:12.84 .net
どっちも1992年頃にできた。OSSといえども商業的な成功がコミュニティ形成の鍵。
それ以外はGood Oldを懐かしむロートルか宗教的価値観に支えられているだけ。

622:デフォルトの名無しさん
14/03/01 01:51:22.19 .net
GUI比較スレってなんだよね・・・
比較的な話ってここで展開してもよいものやら
というかwxWidgetとQtどっちも使ってる人っているのか

623:デフォルトの名無しさん
14/03/01 02:28:31.91 .net
世の中のアプリケーションはQtかAwt/Swingが採用される流れ。
直交性ならgtk。サクッと安定したものを書くならtk。
トイプログラムならSDL+OpenGL。生きるとは残酷なことである。

624:デフォルトの名無しさん
14/03/01 12:13:44.67 .net
バイナリサイズでかいですな
VC2010でサイズ最適化オプションかけてもHelloWorldで5MB...
これはもうどうしようもない感じ?

625:デフォルトの名無しさん
14/03/01 12:23:48.03 .net
どうしようもないっす
ベース部分(wxStringとかwxWindowとか)の定義が容量食ってるから?ではないかという疑惑

626:デフォルトの名無しさん
14/03/01 12:27:18.78 .net
うーんなるほど
ランタイムで色々判断出来るような設計なんですかねえ

627:デフォルトの名無しさん
14/03/01 12:32:32.69 .net
そうですねwxWidgetsはRTTIの仕組みが活かされてるみたいなドキュメントはどっかで見た
たぶんwxWidgetsの中核であるwxWindowクラスはそんなんばっかしなんだろう

628:デフォルトの名無しさん
14/03/05 12:40:46.24 .net
ファイル操作系が異様にやりにくい
wxString dir_name("some directly name");
dir_name.Traverse(some_traverser,wxString(""),flags);
でディレクトリたどりながらファイル抽出できるかなとおもったが
flags = wxDIR_FILES
だとそのディレクトリの中身”のみ”探す
flags = wxDIR_DIRS
だとその下の”全ての”階層のディレクトリを抽出する
wxDIR_DEFAULT
だとその下の”すべての”ファイルを探す
なんでこんな仕様なんだ

629:デフォルトの名無しさん
14/03/05 12:45:32.18 .net
ああわかった
ディレクトリが見つかった場合のみその下も探す、ということなんだな
するとファイルのみだと当然下なんぞ無いからそれ以下を探すことはなく
ディレクトリのみ、とすると下にもいけるから最下層まで探そうとするわけか
うーん

630:デフォルトの名無しさん
14/03/05 12:55:52.46 .net
連投失礼
Traverserクラスを継承してそのOnDir関数の返り値で制御すればいいということでした

631:デフォルトの名無しさん
14/03/11 15:51:27.09 .net
浮動小数点を扱えるsliderってデフォルトではなさそうですか?

632:デフォルトの名無しさん
14/03/11 17:23:40.57 .net
たとえば 0 - 100 を 10 で割ると
0.0 - 10.0 のレンジになります

633:デフォルトの名無しさん
14/03/11 17:30:20.25 .net
やっぱそんな感じなんすね
最大値最小値現在値ラベル表示が便利だなーとおもったんですが、小数点付きでやろうと思ったら
自分でラベル付けるしかなさそうですね

634:デフォルトの名無しさん
14/03/15 21:45:40.12 w4oGcJBI.net
右側のボタンを押したら左側のパネルを再描写させたい、など
あるイベントから(親でない)ほかのイベントを誘発させたい時ってあると思うのですが
その辺に関する記事てどっかにあります?

635:デフォルトの名無しさん
14/03/15 23:13:55.37 eHN/5w2/.net
>>634
そのへんはイベント処理の領域になりますね
wxWiki見るしかない感じ

イメージとしては
Sample::LeftPanelRedraw(wxCommandEvent& event);
というイベント関数のIDがID_LeftPanelRedrawであった場合

そのイベントは
wxCommandEvent e(wxCommandEvent(wxEVT_COMMAND_BUTTON_CLICKED, ID_LeftPanelRedraw));
LeftPanelRedraw(e);
で呼べる

636:デフォルトの名無しさん
14/03/15 23:39:19.87 w4oGcJBI.net
>>635
了解です、参考にさせていただきます

637:デフォルトの名無しさん
14/03/21 12:58:58.01 hjbpSh7I.net
わかりました
wxWindowBase::wCaptureMouse()を呼び出すと以降座標とイベントが取得されるようです

638:デフォルトの名無しさん
14/03/23 17:51:04.60 cY3NJQQl.net
はい。知ってますよ。

639:デフォルトの名無しさん
14/03/23 19:26:21.87 0loqh5rV.net
いや、知らないです

640:デフォルトの名無しさん
14/05/12 21:36:09.61 d288LkW9.net
クロスプラットフォームの開発環境について調べてるんですが、wxWidgetsの
GUIは外観とかは各プラットフォームのものが使われるんですか?それとも
独自のテーマになってしまうんでしょうか?

641:デフォルトの名無しさん
14/05/12 21:48:19.14 N4i3m2/R.net
>>640
各プラットフォームのものが使われます
つまりWindowsならWIN32、LinuxならGTK、MacならCocoa
それぞれの外観になります

対してQtやTk、JavaのSwingなどは独自のテーマになります

642:デフォルトの名無しさん
14/05/12 21:58:07.29 KhXbSVtN.net
Qtってそうだったんだ

643:デフォルトの名無しさん
14/05/12 22:57:11.37 d288LkW9.net
>>641
ありがとうございます。他の環境まで概括してくださるとは助かりました。

644:デフォルトの名無しさん
14/05/13 02:25:29.32 mUTDx2p/.net
>>640
敢えてプラットフォームのを使わず
テーマ選ぶ方法もあったはず

645:デフォルトの名無しさん
14/05/23 01:42:23.54 NdcsMWjh.net
wxFormBuilder 3.4.2betaがリリースされていたので試してみたら、
wxWidgets3.0ベースのGUI描画になったおかげか、2.8をベースに作っていたレイアウトがごっそり狂った。
これから3.0で作る分にはいいと思うけど、2.8で作る分には3.4.0betaで止めておいた方が良いかも。

646:デフォルトの名無しさん
14/06/03 09:02:12.18 va6vQ78Z.net
Swiftスレ
スレリンク(tech板)

647:デフォルトの名無しさん
14/06/04 21:33:25.19 EBZlr/6D.net
いまこのスレ開いたら、>>645にあったはずの有益な書き込みが消えている…
貼っておこう

> 646 名前:デフォルトの名無しさん [sage]: 2014/05/23(金) 01:42:23.54 ID:NdcsMWjh
> wxFormBuilder 3.4.2betaがリリースされていたので試してみたら、
> wxWidgets3.0ベースのGUI描画になったおかげか、2.8をベースに作っていたレイアウトがごっそり狂った。
> これから3.0で作る分にはいいと思うけど、2.8で作る分には3.4.0betaで止めておいた方が良いかも。

648:デフォルトの名無しさん
14/06/05 01:15:41.59 /T91KtMA.net
なんと、板移転したときに消えたのかもしれないね。

649:デフォルトの名無しさん
14/06/19 12:54:27.42 sMGAuaVR.net
wxWidgetsを使って作られたプログラムの一覧ってあったりするのかね?
とりあえずAudacityは知ってる

650:デフォルトの名無しさん
14/06/19 19:37:20.57 Brdb8B0I.net
URLリンク(www.wxwidgets.org)
とか

651:デフォルトの名無しさん
14/06/19 19:41:04.43 sMGAuaVR.net
おーありがとう
後で見て回る
テンプレにあってもいいじゃないかな?

652:デフォルトの名無しさん
14/06/19 20:07:59.88 gduOxxnf.net
車の再発見

653:デフォルトの名無しさん
14/06/19 22:56:02.45 Brdb8B0I.net
商用アプリは
URLリンク(wiki.wxwidgets.org)

654:デフォルトの名無しさん
14/08/20 15:57:43.03 TAUePqVhc
>>644
そんなんあったっけ?

655:デフォルトの名無しさん
14/08/24 18:20:53.22 Gtnn2j9y.net
wxWidgetsで、フォームを閉じる処理をして実際に閉じるまでの間に発生するイベントとかある?
.NETで言うところのOnClosingみたいな感じで。

656:デフォルトの名無しさん
14/08/25 02:12:21.61 OTL7uAT+.net
OnClose
OnVeto

657:デフォルトの名無しさん
14/08/25 14:23:49.85 IQl9g11m.net
>>656

おかげで作業が進みました。

658:デフォルトの名無しさん
14/08/26 17:09:00.43 QEgdFK7f.net
Windows で、
CrossBlock + MinGW + wxWidget
で最も簡単な GUI アプリを基本プロジェクトで作成してみたところ、

MyTest.exe のサイズ:736KB
(wxWidgetのDLL) wxmsw28u_gcc_custom.dll のサイズ : 15.9MB
MyTest.exe のメモリ使用量 : 7,732KB // TaskManagerの表示

となった。

この基本アプリは、HelpでAboutでメッセージ・ボックスが表示できる
ようになっているが、メニュー項目をクリックしてから実際にそれが
出るまで数秒かかる。実験したのはそこそこ速いマシンと速いWindows
での事。

659:デフォルトの名無しさん
14/08/26 17:09:45.00 QEgdFK7f.net
ただし、遅いのは最初の一回だけ。
一度でも表示すると後は速い。

660:デフォルトの名無しさん
14/08/26 17:56:51.72 QEgdFK7f.net
Mailer の Thunderbird-Portable なんかもマルチプラットフォーム対応
だけど、起動がかなり遅い。これも巨大な dll を読み込んだりしてる
からかな。

起動やメニュー操作が遅くなるのはマルチプラットフォーム化する代償
として負わされるのかも知れん。

こういうツールキットで軽快なアプリを作るのは難しいのかもな。

661:デフォルトの名無しさん
14/08/26 19:14:34.45 OmJCXozv.net
小規模の自作ソフトでwxWidgetsをスタティックリンクしない理由が分からん
わざわざ合計バイナリサイズを大きく、速度も遅くする理由がどこにあるのだろう

662:デフォルトの名無しさん
14/08/26 21:27:38.25 QEgdFK7f.net
>>661
なるほど、スタティックリンクにすれば、起動後になってからユーザーの
命令に対する応答が遅れる事はなくなるかもしれない。
起動が遅くなるだけで済むんなら、そっちの方がストレスが少ないかも。

663:デフォルトの名無しさん
14/08/26 21:50:56.10 JtVIC4MG.net
ある程度規模が大きくなるとスタティックリンクだと初回起動が遅すぎになので
dllにモジュールを分割してやったほうがいい
起動時のメモリへのロード時間はどうしようもないのでスプラッシュをつけてごまかす

664:デフォルトの名無しさん
14/08/26 22:39:34.76 QEgdFK7f.net
CrossBlockでは、monolithic タイプのライブラリをビルドしてから使う
ようになってるんだけど、それも遅い原因なのかな。

でも起動後にユーザー入力に対するレスポンスが遅いのはどう説明すれば
いいんだろう?

普通の Windows の仕様だと原則、起動時に全ての DLL をロードする。
LoadLibrary()を使えば動的にロードすることも可能は可能だけど、
それをする必要は旧OSでサポートしてなかった新OSのDLLをロードする
ような場合は、多言語化のサポートなど。

なるほど、多言語化のせいかも。_("xxx") みたいなのがあったから、
gettext を使ってる。それでリソースを動的ロードしているのか。

665:デフォルトの名無しさん
14/08/27 04:40:25.51 IfBPvyzm.net
何度かアプリ起動しているうちにWindowsのFetchが学習してくれて
DLLとか先読みしてくれるようにならないのだろうか

666:デフォルトの名無しさん
14/08/27 06:47:58.33 J2peHUgZ.net
>>665
それはなる。
・ディスクの内容は、メモリにキャッシュされる。
・同じDLLは、全てのアプリで物理メモリが共有されると聞いたことがある。

# >>664 は、CrossBlockではなく、CodeBlocksだった。スマン。

それより、wxWidget 本家のソース配布に入っている samples を
Windows の mingw32 でビルドしてみたところ、全然遅くなかった。

・アプリの起動は速い。
・起動後のメニューコマンドやユーザー入力に対するレスポンスも速い。
・Aboutダイアログも瞬間ではないが、0.3秒程度で、Windows Nativeアプリ
 でも、その程度の遅さはある場合があるので遜色ない。

CodeBlocks で作ったものが遅い原因は今のところ謎。やはり monolithic な
ライブラリを使用しているからか。

667:デフォルトの名無しさん
14/08/27 07:54:18.52 X38Kg7Ty.net
>>666

># >>664 は、CrossBlockではなく、CodeBlocksだった。スマン。

なんだと思ったらわりと素人じゃねえかおい

>CodeBlocks で作ったものが遅い原因は今のところ謎。やはり monolithic な
>ライブラリを使用しているからか。

monolithicってのはwxWidgetsのモジュール全部入りのDLL作るという意味なので遅くて当然
(実際試したことないので遅いというのは初めて知ったが…)

普通は ./configure --prefix=/mingw --enable-shared みたいに指定してビルドするから
モジュールごとに分割されたDLLが作成される
Windows上で開発する時はMinGW + NTEmacs/eclipse CDTの環境がおすすめ

668:デフォルトの名無しさん
14/08/27 09:58:52.27 J2peHUgZ.net
>>667
最後の段落:多分、wxWidgets 本体を MInGW32 用のビルドする際は、
configure は使えない気がする。
CodeBlocks のQuickなんたらRefの説明では、いきなり、
make するように支持されていた。しかも、-fno なんたら dll-export
みたいなオプションを付けろと指示。これは、MinGW32のバグで、
付けないと最後のldの段階でldがクラッシュする事をたまたま発見。


ところで話は変わって聞いておきたいのですが、 eclipse では
wxWidget のイベントを書くようなときに

・BEGIN_EVENT_MAP に自動的に一行マクロを挿入してくれて
・*.h にもメンバ関数宣言を書いてくれて
・*.cpp にも5行くらいの関数定義本体の雛形を書いてくれ

たりしますか?

669:デフォルトの名無しさん
14/08/27 10:01:06.29 J2peHUgZ.net
つまり、イベント・ハンドラを追加したとき、

BEGIN_EVENT_TABLE(wxListMainWindow,wxScrolledWindow)
EVT_PAINT (wxListMainWindow::OnPaint)
EVT_MOUSE_EVENTS (wxListMainWindow::OnMouse)
EVT_CHAR (wxListMainWindow::OnChar)
EVT_KEY_DOWN (wxListMainWindow::OnKeyDown)
EVT_KEY_UP (wxListMainWindow::OnKeyUp)
EVT_SET_FOCUS (wxListMainWindow::OnSetFocus)
EVT_KILL_FOCUS (wxListMainWindow::OnKillFocus)
EVT_SCROLLWIN (wxListMainWindow::OnScroll)
EVT_CHILD_FOCUS (wxListMainWindow::OnChildFocus)
END_EVENT_TABLE()

とか、クラスを書くとき

IMPLEMENT_DYNAMIC_CLASS(wxListMainWindow,wxScrolledWindow)

見たいなものの自動生成があるとうれしいんですが、そういう IDE
はありません?

670:デフォルトの名無しさん
14/08/29 11:13:03.59 AEJEOYpd.net
wxWidgetsの問題点の1つは、プログラムのサイズが大きくなる事。
特に静的リンクしたときに顕著。

Windows は、VC++ にて、
ac1rd: CUI の Win32 と printf() を使ったもののリリース・動的リンク版が 16KB程度。
    puts() を使えばもっと小さく出来る。
ac1rs: CUI の Win32 と printf() を使ったもののリリース・静的リンク版が 40KB程度。
    puts() を使えばもっと小さく出来る。
ag2rd: GUI の MFC の 基本的な MDI アプリがリリース・動的リンク版で 36 KB 程度。
ag2rs: GUI の MFC の 基本的な MDI アプリがリリース・静的リンク版で 332 KB 程度。


wxWidgets 2.8.12 の samples では、
bc1rd: CUI の console.exe がリリース・動的リンク版で 138KB
bc1rs: CUI の console.exe がリリース・静的リンク版で 863KB
bc1dd: CUI の console.exe がデバッグ・動的リンク版で 184KB

bg2rd: GUI の keyboard.exe がリリース・動的リンク版で 293KB
bg2rs: GUI の keyboard.exe がリリース・静的リンク版で 2,924KB
bg2dd: GUI の keyboard.exe がデバッグ・動的リンク版で 492KB

ただし、bc1xx は、アプリ本体のプログラムが複雑なことをしているようなので、
もっと小さく出来る可能性があり。

671:デフォルトの名無しさん
14/08/29 19:04:31.75 GS9LyL7J.net
その説明にac1だの何だの自分以外分からない定義を使う必要があったのだろうか

672:デフォルトの名無しさん
14/08/29 19:07:59.00 AEJEOYpd.net
今から見るとそうかも。
a: Windows Native or MFC
b: wzWidgets
c: CUI
g: GUI
r:release, d:debug
d:dynamic link, s:static link

673:デフォルトの名無しさん
14/08/30 00:17:55.46 S/CtHe8u.net
>>668

>最後の段落:多分、wxWidgets 本体を MInGW32 用のビルドする際は、
>configure は使えない気がする。

なにいってんだCodeBlocksのドキュメントにそう書いてあるだけで
基本autotoolsで作られたソースはconfigureでビルドできるぞ
実際自分はWindows上のmingw32/64、LinuxのクロスビルドからのMinGWでconfigure使ってる

なぜMakefileでやれという指示なのかというと、そのほうが簡潔で保守しやすいからだ
あとGNU MakeじゃないMakeでもビルドできるようにしたいとかいう微妙なこだわりが有る場合も有る

>>669
エディタの補助機能を使うべきだ、Emacsなら矩形範囲選択で一気に書ける
ソースのひな形自動生成機能は知らんなあ

674:デフォルトの名無しさん
14/08/30 00:21:29.81 S/CtHe8u.net
>>670
MinGWビルドでバイナリをストリップしたやつとか比較しないのか

675:デフォルトの名無しさん
14/08/30 07:56:49.02 pUv0T+7B.net
>>674
Stripに詳しくないので、言っている意味が分からない。

Stripって Release 用に Build した Binary に対して行っても
サイズダウンできたりするの?

676:デフォルトの名無しさん
14/08/30 07:58:19.03 pUv0T+7B.net
>>674
Stripに詳しくないので、言っている意味が分からない。

Stripって Release 用に Build した Binary に対して行っても
サイズダウンできたりするの?

677:デフォルトの名無しさん
14/08/30 08:15:51.54 hpIa4Qjb.net
日本語インライン入力の対応ってまだなの?
というか予定自体なくて諦めた方がいい?
wxWidgets使ってるEditraってエディタにそろそろ移行できるかなと
思って試してみたら、未だにインライン入力できない

678:デフォルトの名無しさん
14/08/30 08:19:53.34 pUv0T+7B.net
>>674

小さくなりますた!!


Relese, 動的リンク
/wxWidgets-2.8.12/samples/keyboard/gcc_mswdll/keyboard.exe

strip 前:299,808 bytes
strip 後:124,430 bytes

Relese, 静的リンク
/wxWidgets-2.8.12/samples/keyboard/gcc_msw/keyboard.exe

strip 前:2,993,255 bytes
strip 後:1,887,758 bytes

strip 後も、*.exe が正常に起動することを確認済み。

679:デフォルトの名無しさん
14/08/30 08:22:26.84 pUv0T+7B.net
>>673
>エディタの補助機能を使うべきだ、Emacsなら矩形範囲選択で一気に書ける

詳しく:

680:デフォルトの名無しさん
14/08/30 11:51:11.86 RJxcDZkh.net
馬鹿には無理

681:デフォルトの名無しさん
14/08/30 12:02:34.82 S/CtHe8u.net
スタンド・アローン・コンプレックスと化した馬鹿には無理さんオッスオッス

>>679
cua-modeでググって
URLリンク(qiita.com)

例えばイベントテーブルとかはこれでザクッと一気に書ける
もちろん個々のwxWindowIDとメソッド定義は書かなくてはいけないが
クラス名とマクロ定義は同じ文字列の繰り返しなのでだいぶ楽になる

682:デフォルトの名無しさん
14/08/30 13:53:01.64 pUv0T+7B.net
>>681
あー、そういう風に沢山のイベントを一気に書きたいんじゃなくて、
開発段階で徐々にイベントを追加して行く際に、

1. *.h のクラス内にメンバ関数宣言
2. *.cpp に EVENT MAP
3. *.cpp に メンバ関数定義の本体

の三箇所にコードを書くのが面倒ということなんだわ。

683:デフォルトの名無しさん
14/08/30 14:33:49.98 S/CtHe8u.net
>>682
それは自分で作らないと無さげですねえ

684:デフォルトの名無しさん
14/08/30 19:11:57.66 5dlfaubU.net
wxFormBuilderでしかGUIとイベントを設計できない俺には何言ってるのかさっぱりわからんぜよ……

685:678
14/08/31 15:54:21.95 X+I89xFV.net
wxAUI のデモ・アプリ wxauitest.exe のサイズは、1,417,216 bytes。
スタンドアロンのアプリで、環境変数からパスを完全に消去しても起動
できた。つまり、ライブラリはDLLを使わずに静的リンクされている。
wxAUIはFloating & Dockingのできる強力なGUI。

>>678 に示した keyboard.exe はキーボードから押されたキーの値を
表示するだけで、上記アプリよりずっとシンプルなのにも関わらず、
1,887,758 bytes と 470,542 bytes も大きい。

理由は不明。

686:デフォルトの名無しさん
14/08/31 15:56:18.96 5rh0udnx.net
そんなことしなくても
DLLの依存関係調べるツールあるのに

687:デフォルトの名無しさん
14/08/31 16:01:12.95 5rh0udnx.net
ちなみにwxWidgetsで作った一番小さいexe探したら65kbのがあった

688:678
14/08/31 17:34:23.46 X+I89xFV.net
Windows実行形式であっても、コンパイラが、MinGW32 と VC++ でサイズに
大幅な違いが出てくるのかな?

689:678
14/08/31 17:41:03.82 X+I89xFV.net
>>687
それは DLL 版だよ。絶対に。

690:デフォルトの名無しさん
14/08/31 19:56:13.33 F1QgxQvq.net
>>685
実行ファイルの関数テーブルに何が入っているか nm で確認したら少しはわかるかもね

>>688
大幅とは行かないかもしれないがVC++はWindowsのみをターゲットにしているから
基本的にコンパイル後のバイナリサイズは MinGW > VC++ だよね

691:デフォルトの名無しさん
14/08/31 20:18:05.13 da+aRwUf.net
CodeBlocks + MinGW32 で、
wxWidgets の Monolithic、ASCIIライブラリ, 静的リンク で
最も簡単な Frame Based な GUI を作成してみたら、
2,073,600 バイトよりは小さくならなかった。

wxWidgets のライブラリは、
-Os
-ffunction-sections
-fdata-sections
でコンパイルし、
-Wl,--gc-sections -s
でライブラリ化した。その時のコマンド:

mingw32-make -j2 -f makefile.gcc CPPFLAGS="-MD -MP -DHAVE_W32API_H
-D__WXMSW__ -DNOPCH -DwxDEBUG_LEVEL=0 -DNDEBUG" CFLAGS="-mthreads
-fmessage-length=0 -ffunction-sections -fdata-sections -fno-builtin
-Os" CXXFLAGS="-mthreads -Wno-ctor-dtor-privacy -fmessage-length=0
-ffunction-sections -fdata-sections -fno-builtin -Os
-fno-keep-inline-dllexport" LDFLAGS="-Wl,--subsystem,windows
-Wl,--gc-sections -s -mthreads -mwindows"
BUILD=release UNICODE=0 SHARED=0 MONOLITHIC=1


CodeBlocks でアプリのリンクのオプションにも、
-Wl,--gc-sections -s
は付けてある。

692:デフォルトの名無しさん
14/08/31 20:27:38.74 da+aRwUf.net
ちなみに、Unicode 版より ASCII 版のほうが小さくなることを確認済みである。

[Compiler settings - #defines]
が、標準では、
__GNUWIN32__, __WXMSW__, WXUSINGDLL, wxUSE_UNICODE, WX_PRECOMP
となるところを:
__GNUWIN32__, __WXMSW__
だけとし、

[Search Directories] の Compiler, Linker, Compiler
の、gcc_dll の部分を、gcc_lib に変えた。

アプリにリンクするリンクライブラリとしては、上記で作成した Monolithic
ライブラリだけでは足りず、以下が必要であった。Win32のimport libraryは、
ライブラリを動的リンクする場合はライブラリのDLLが行っているので必要ない
が、ライブラリを静的リンクする場合は、アプリが直接リンクする必要がある
ため必要となるのは理解できる。libwxpng, libwxjpeg, libwxtiff, libwxzlib
が必要となった理由は不明。

libwxmsw28 // これが wxWidgets の monolithic ライブラリ本体。
libwxpng
libwxjpeg
libwxtiff
libwxzlib
libuuid // Win32 の import library
libcomctrl32 // Win32 の import library
libwinspool // Win32 の import library
liboleaut32 // Win32 の import library
libole32 // Win32 の import library

ちなみに、wxWidgets を動的リンクする場合は、ここが、libwxmsw28
だけで済む。

693:デフォルトの名無しさん
14/08/31 20:33:24.61 da+aRwUf.net
誤:[Search Directories] の Compiler, Linker, Compiler
正:[Search Directories] の Compiler, Linker, Resource Compiler

誤:Win32のimport libraryは、ライブラリを動的リンクする場合はライブ
  ラリのDLLが行っているの
正:wxWidgets ライブラリをアプリに動的リンクする場合は
  wxWidgets ライブラリの DLL 部分が Win32 の import library の
  リンクを行っているの

694:デフォルトの名無しさん
14/08/31 20:45:44.37 0aT2mco7.net
サイズはどうでもよくないか。exeを使う側としては速度では?
あとコア、主要のライブラリのビルドから、ダイナミックリンクを徹底してOSに丸投げしたら小さくなるだろ。

695:デフォルトの名無しさん
14/08/31 20:48:05.22 ks+4W1rG.net
完全テンプレートライブラリにしたら軽くなるんだろうか

696:デフォルトの名無しさん
14/08/31 20:58:57.78 da+aRwUf.net
>>694
でも wxWidgets がやっていることの割にはリンクされるバイト数が多すぎる
感じがする。
基本、Win32をラッピングしているだけなのだから、2MBも必要ない。

697:デフォルトの名無しさん
14/08/31 21:00:34.83 ks+4W1rG.net
ラッピングしてるだけじゃなくマルチプラットフォームのために徹底した抽象化をしてるんでしょ
とソースも読まず推測

698:デフォルトの名無しさん
14/08/31 21:04:00.35 da+aRwUf.net
>>697
でもソースを呼んでみたら、たとえば、wxListCtrl なんかは、
Win32 の LIST CONTROL をそのまま使っていた。
DrawRect()などで書いているわけではない。
ただし、wxGenericListCtrl だったかは、DrawRect()みたいなグラフィック
関数で独自に描画していた。が、それは、Windows版では簡単には使えない
という噂を聞いたが。

699:デフォルトの名無しさん
14/08/31 21:06:47.60 da+aRwUf.net
>>697
wxWidgets の基本設計は、Widgetは、OS nativeの物を使うが、
どんなサイズであっても対応できるように Sizer で Layout を
コントロールする、という物。

なので、抽象化はサイズと配置程度で済むはずなのだが・・・。

700:デフォルトの名無しさん
14/08/31 21:09:35.31 F1QgxQvq.net
>>696

>>697の言ってることが正しい。

---------------------
    wxWidgets
---------------------
Win32 | GTK | Cocoa etc...
---------------------

wxWidgetsは通常のGUI用ライブラリに一枚レイヤを重ねた形になるので
型情報・関数テーブルの情報だけで結構容量食う

>>692
ASCIIモードでビルドするのはやめておいたほうがいい
日本語使えないし

というかなぜMonolithicビルドにこだわるのか…
普通にconfigureからビルドしてdllごと配布したほうが立ち上がりは早い

701:デフォルトの名無しさん
14/08/31 23:57:56.42 da+aRwUf.net
wxWidgets の samples で ListCtrl 関連を見てみたが、ヘッダを
ドラッグしようとしてもドラッグできないので、ドラッグによる列の入れ替
えは出来ないようだった。

実は、Win32 の LIST CONTROL は、

・マウスドラッグによる自動的な列の入れ替えをした際、どこにどの列が
 行ったかを掌握するには注意が必要。動作を知るには基本的に実験を必要
 とする。
・第1カラムを削除すると第2カラム以降を削除した時とは同じとは言えない
 奇妙な動作をする。奇妙な動作と言ったがバグに近い。

こういった辺りがどう処理されているか知りたかったのだが、サンプルでは
故意か偶然か、全くそこに触れていないようだった。

702:デフォルトの名無しさん
14/08/31 23:59:28.64 da+aRwUf.net
wxWidgets の samples で ListCtrl 関連を見てみたが、ヘッダを
ドラッグしようとしてもドラッグできないので、ドラッグによる列の入れ替
えは出来ないようだった。

実は、Win32 の LIST CONTROL は、

・マウスドラッグによる自動的な列の入れ替えをした際、どこにどの列が
 行ったかを掌握するには注意が必要。動作を知るには基本的に実験を必要
 とする。
・第1カラムを削除すると第2カラム以降を削除した時とは同じとは言えない
 奇妙な動作をする。奇妙な動作と言ったがバグに近い。

こういった辺りがどう処理されているか知りたかったのだが、サンプルでは
故意か偶然か、全くそこに触れていないようだった。

703:デフォルトの名無しさん
14/09/01 00:00:47.70 X69OanmZ.net
>>700
>wxWidgetsは通常のGUI用ライブラリに一枚レイヤを重ねた形になるので
>型情報・関数テーブルの情報だけで結構容量食う

オイラはコンパイラの基本部分に詳しいが、それだけで1MBなどには
ならない。

704:デフォルトの名無しさん
14/09/01 00:06:51.19 X69OanmZ.net
>>694
諦めることも手かも知れないけど、やっている事の規模とサイズとの
ギャップに納得がいかない人もいるはず。

wxWidgetsはラッピング・ライブラリの一種。

8bit時代、16bit時代を知る人にとって、Widget 程度が64KBを超える
事があってはならない。どういうプログラミングをしたら2MBにもなる
のか。

705:デフォルトの名無しさん
14/09/01 01:16:10.03 7Pg7L2PA.net
>>703
>>704
一理あるのでちょっとメーリングリストを探ってみたり
まず、wx/wx.hがいろいろなヘッダファイルを事前にincludeしているので
それがバイナリサイズの増加の一因になっているらしい

[wxMSW]: why EXE-files are so large?
URLリンク(groups.google.com)

706:デフォルトの名無しさん
14/09/01 07:25:22.06 X69OanmZ.net
>>591 のライブラリを samples/keyboard にも使ってみたら、
keyboard.exe のサイズを 1,619,968 にまで縮小することに成功した。
コンパイラは MinGW32 のまま。
条件は:release, 非UNICODE(ASCII), SHARED=0(静的リンク), MONOLITHIC = 1

どうやら MONOLITHIC であるかどうかは最終 exe サイズには関係してないらしい。
ライブラリと言うのは集めてもばらしても、最終 exe のリンク結果には影響を
及ぼさない事が基本なので、元々当たり前なことなのだが。



[samples/keyboard]
$ mingw32-make -f makefile.gcc BUILD=release UNICODE=0 SHARED=0 MONOLITHIC=1


[samples/keyboard/makefile.gcc の修整]
-------------------------------------------------------------------------------------
$(OBJS)\keyboard.exe: $(KEYBOARD_OBJECTS) $(OBJS)\keyboard_keyboard_rc.o
     $(CXX) -o $@ $(KEYBOARD_OBJECTS) $(__DEBUGINFO) $(__THREADSFLAG)
-L$(LIBDIRNAME) -Wl,--subsystem,windows -Wl,--gc-sections -Wl,-s -mwindows
$(____CAIRO_LIBDIR_FILENAMES_p) $(LDFLAGS) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p)
$(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)
-lwxzlib$(WXDEBUGFLAG) -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG) -lwxexpat$(WXDEBUGFLAG)
$(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) $(__CAIRO_LIB_p)
-lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32
-loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lodbc32
--------------------------------------------------------------------------------------

上記は original の makefile.gcc に、
-Wl,--gc-sections -Wl,-s
を追加しただけ。

707:デフォルトの名無しさん
14/09/01 07:31:05.33 X69OanmZ.net
誤:>>591
正:>>691

708: 【大吉】
14/09/01 07:40:36.83 zQucGkuf.net
wxWidgets の samples で ListCtrl 関連を見てみたが、ヘッダを
ドラッグしようとしてもドラッグできないので、ドラッグによる列の入れ替
えは出来ないようだった。

実は、Win32 の LIST CONTROL は、

・マウスドラッグによる自動的な列の入れ替えをした際、どこにどの列が
 行ったかを掌握するには注意が必要。動作を知るには基本的に実験を必要
 とする。
・第1カラムを削除すると第2カラム以降を削除した時とは同じとは言えない
 奇妙な動作をする。奇妙な動作と言ったがバグに近い。

こういった辺りがどう処理されているか知りたかったのだが、サンプルでは
故意か偶然か、全くそこに触れていないようだった。

709:デフォルトの名無しさん
14/09/01 07:45:41.49 X69OanmZ.net
>>694
>あとコア、主要のライブラリのビルドから、ダイナミックリンクを徹底してOSに丸投げしたら小さくなるだろ。

>>692」で示した Win32 import library は、Windows のシステム DLL
をリンクするための小さなライブラリ。例えば、
libcomctrl32 をリンクしていても、実際は、comctrl32.dll が動的リンク
される。libcomctrl32.a は、MinGW32 が用意している import library で:

/xxx/CodeBlocks/MinGW/lib/libcomctl32.a # 86,428 bytes
C:/WINDOWS/system32/comctl32.dll     # 617,472 bytes

のように、windows/system32 の comctrl32.dll を動的リンクするための
呼び出し部分だけを提供する小さなライブラリ。

710:デフォルトの名無しさん
14/09/01 08:18:53.15 1emh7fCQ.net
map出力して何がリンクされてるか見れば?

711:デフォルトの名無しさん
14/09/01 14:09:14.38 X69OanmZ.net
MONOLITHIC の値が違うと別の *.o が作成されることが判明。
以下は、SHARED=0(静的リンク)の場合の、MONOLITHIC が 0 と 1 の場合。

CORELIB_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \
  $(GCCFLAGS) -DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
  $(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \
  $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) \
  $(__MSLU_DEFINE_p) $(__GFXCTX_DEFINE_p) -I$(SETUPHDIR) -I..\..\include \
  $(____CAIRO_INCLUDEDIR_FILENAMES) -W -Wall -DWXBUILDING -I..\..\src\tiff \
  -I..\..\src\jpeg -I..\..\src\png -I..\..\src\zlib -I..\..\src\regex \
  -I..\..\src\expat\lib -DwxUSE_BASE=0 $(__RTTIFLAG) $(__EXCEPTIONSFLAG) \
  -Wno-ctor-dtor-privacy $(CPPFLAGS) $(CXXFLAGS)

MONOLIB_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \
  $(GCCFLAGS) -DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
  $(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \
  $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) \
  $(__MSLU_DEFINE_p) $(__GFXCTX_DEFINE_p) -I$(SETUPHDIR) -I..\..\include \
  $(____CAIRO_INCLUDEDIR_FILENAMES) -W -Wall -DWXBUILDING -I..\..\src\tiff \
  -I..\..\src\jpeg -I..\..\src\png -I..\..\src\zlib -I..\..\src\regex \
  -I..\..\src\expat\lib -DwxUSE_BASE=1 $(__RTTIFLAG) $(__EXCEPTIONSFLAG) \
  -Wno-ctor-dtor-privacy $(CPPFLAGS) $(CXXFLAGS)

712:デフォルトの名無しさん
14/09/01 14:13:21.84 X69OanmZ.net
違いは、-DwxUSE_BASE の部分で、
 MONOLITHIC = 0 の場合 : -DwxUSE_BASE=0  // #define wxUSE_BASE 0
 MONOLITHIC = 1 の場合 : -DwxUSE_BASE=1  // #define wxUSE_BASE 1
となっている。

例えば、/xxx/src/msw/dc.cpp は、同じソースに対し make に渡すオプションに応じて
以下の2種類の *.o ファイルが作成される。
1つ目は、MONOLITHIC=0の時に作られ、2つ目は、MONOLITHIC=1の時に作られる。

ifeq ($(USE_GUI),1)
$(OBJS)\corelib_dc.o: ../../src/msw/dc.cpp
  $(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
endif

ifeq ($(USE_GUI),1)
$(OBJS)\monolib_dc.o: ../../src/msw/dc.cpp
  $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
endif

ソースを見ると、wxUSE_BASE の値に応じて場合分けされている箇所が多数ある。
つまり、MONOLITHIC の 0 と 1 の違いは単に *.o ファイルの集め方の問題では無い。
コンパイル時点のソース自体が変更されるのである。故にリンク後の*.exe のサイズ
が変わって来ても不思議は無い。これは驚くべきことである。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch