【GUI】wxWidgets(旧wxWindows) その4【サイザー】at TECH
【GUI】wxWidgets(旧wxWindows) その4【サイザー】 - 暇つぶし2ch678:デフォルトの名無しさん
09/10/26 11:27:10
なるほど、未確定中にESC押すと入力文字が消え、その後再度ESC押すとダイアログが閉じるのが
普通の動作だが、RapidSVNは未確定文字のキャンセルとダイアログのクローズが同時に起こるな。

679:658
09/10/26 14:56:45
>>676

返信ありがとうございます。
マルチスレッド(/MT)でコンパイルだと一筋縄でいかないようで、
LIBCMT.libを無視するように設定したりしたら、エラーが減ったんですが、最後、

1>リンクしています...
1>xxx.obj : error LNK2001: 外部シンボル ""public: void __thiscall wxStringData::Free(void)" (?Free@wxStringData@@QAEXXZ)" は未解決です。
1>E:\Documents and Settings\xxx\My Documents\Visual Studio 2008\Projects\morphingpot_v1a\Release\xxx.exe : fatal error LNK1120: 外部参照 1 が未解決です。
1>ビルドログは "file://e:\Documents and Settings\xxx\My Documents\Visual Studio 2008\Projects\xxx\xxx\Release\BuildLog.htm" に保存されました。
1>xxx - エラー 2、警告 0

のエラーが対処できません。
コンパイルしているのは、サンプルでOpenGLを使ってるプログラム、penginをベースに変更したものです。
しかし、一番簡単なサンプル、minimalでもこのエラーは発生するみたいです。

680:デフォルトの名無しさん
09/10/26 15:39:40
>>679
string.cpp 150行目

#if defined(__VISUALC__) && defined(_MT) && !defined(_DLL)
# pragma message (__FILE__ ": building with Multithreaded non DLL runtime has a performance impact on wxString!")
void wxStringData::Free()
{
free(this);
}
#endif

ってなってるから、DLLだとうまくいかないけどstaticリンクなら大丈夫なはず
なんか間違ってない?

681:658
09/10/26 18:07:00
>>680
またも返信ありがとうございます。
あれからいろいろありました。

まず、レスについてですが、stringのソースはその通りでした。
それから、staticリンクというのがよくわからないので、
どうすれば良いかよくわからないです。


それと、一応解決しました。
マルチスレッドDLLでコンパイルしたものの、Releaseファイルの中で、
wx_dll.dspをビルドした時に出てきた、
C:\wxWidgets-2.8.10\lib\vc_dllにあるdllファイルを入れたら、
一応動きました。
なんかもう今はとりあえず動けば良いのでこれで良いです。

682:667
09/10/27 01:08:50
>675 >677
ESCでID_CANCEL,ENTERでID_OKの動作になるのはWindowsの仕様なんですね。

>678
samples/dialogsの[Entry dialogs][Text entry]で再現しました。(2.8.10 w/ VC2005)

textctrl.cpp の OnKeyDown, OnChar, MSWShouldPreProcessMessage
window.cpp の MSWProcessMessage, MSWShouldPreProcessMessage には
ESC(IME on/off とも)の入力が飛んでこないようです。
どこなら引っ掛けられますかね?

683:デフォルトの名無しさん
09/10/27 10:37:38
>>681
それだと MSVCRT(のDLL) がない環境で動かないかも?
/MT で使う場合は wxWidgets のライブラリも /MT でコンパイルしないと駄目だけどやった?

684:デフォルトの名無しさん
09/10/27 10:39:56
>>682
確かダイアログの場合は特殊で ESC を雄と WM_COMMAND の ID_CANCEL が
飛んでくるんじゃなかったっけ?
wxWidgets の場合は…なんだっけ、EVT_? マクロを使うんだったかな?

685:デフォルトの名無しさん
09/10/27 12:42:25
>>682
IsDialogMessage()あたりだろうと探してたりしてみたけど、結局同じwindow.cppにある
キーボードフックからESCを検出して独自にIDCANCEL送ってるわ。
フック周りをIMEを意識した作りに直さないと無理そう。

686:デフォルトの名無しさん
09/10/27 12:46:10
一応送ってるとこ書いとくけど、dlgcmn.cppのwxDialogBase::OnCharHook()で呼んでる
EmulateButtonClickIfPresent(wxID_CANCEL)ね。

687:667
09/10/27 13:17:31
みなさんありがとうございます。FEP の On/Off で SetEscapeId() を
かけたら良さそうな気がした(まだ試してない)んですが、msw 以下の
ソースでも wx のヘッダばかり include してますよね。
仮に Imm 系の API を呼ぶようなパッチが作れたとして、wx の本家には
受け入れられないものですか?

688:デフォルトの名無しさん
09/10/27 13:42:48
各OS固有の部分はどうする?

689:デフォルトの名無しさん
09/10/27 14:54:57
あんまり場当たり的なことはよしたほうが・・・
とりあえず、実験的なコードだけどwindow.cppのwxKeyboardHook()の先頭で

HWND hWnd = GetFocus();
HIMC hIMC = ImmGetContext(hWnd);
BOOL immOpen = FALSE;
if (hIMC)
{
 if (ImmGetOpenStatus(hIMC))
 {
  int size = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, NULL, 0);
  immOpen = (size > 0);
 }
 ImmReleaseContext(hWnd, hIMC);
}
とやって、immOpenがTRUEなら既存のルーチン、FALSEならそのままCallNextHookEx()
呼んだら希望の動きはしたよ。
でもまあ、imm32.libのリンクがいるし、この部分もLoadLibrary()+GetProcAddress()にして
リンク不要にしたらいいかもね。window.cppはWindows固有のコードみたいだしね。

690:デフォルトの名無しさん
09/10/27 15:05:00
おっとミス、TRUEとFALSE逆ね、まあわかると思うけど。

691:デフォルトの名無しさん
09/10/27 15:53:57
つまり EURT と ESLAF が正解。

692:デフォルトの名無しさん
09/10/27 16:59:38
>>691
暇人乙

693:658
09/10/27 18:17:38
>>683
一応やったけど、違うエラーがいっぱい出てきたので、
よくわかりませんでした。

694:デフォルトの名無しさん
09/10/28 10:49:43
>>693
違うエラーってどんなのよ。
VC++使ってんだよね?
手順説明すると、Releaseの構成を使うとしたらwxのプロジェクト開いた状態で、
ビルドメニューの構成マネージャ開いてアクティブソリューション構成のとこから
新規作成を選択、名前をMT Release とかにして、設定のコピー元をReleaseにしてOK押して
MT Releaseが選択されてる状態を確認したら、プロジェクトをシフトクリック等で全部選択して
右クリックでプロパティを出して、構成プロパティのC/C++のコード生成のランタイムライブラリを
マルチスレッド(/MT)にしてOK
その後ソリューションのビルドすりゃlibができるよ。


695:デフォルトの名無しさん
09/10/28 14:28:15
Adobe Source Librariesって使ってる人いる?
URLリンク(stlab.adobe.com)

ちゃんと見てないけど、これってwxWidgetsの代わりになるもんなのかどうだろう?

696:658
09/10/29 16:38:29
>>694
何処にも書いてなかった手順ありがとうございます。

しかしですが、
手順どおりやって、
サンプルプログラムminimalをマルチスレッドでコンパイルしたら、
1>wxbase28.lib(dir.obj) : error LNK2001: 外部シンボル ""void __cdecl operator delete(void *)" (??3@YAXPAX@Z)" は未解決です。
とか
1>wxbase28.lib(filefn.obj) : error LNK2019: 未解決の外部シンボル _strstr が関数 "public: __thiscall wxFile::~wxFile(void)" (??1wxFile@@QAE@XZ) で参照されました。
とかのエラーが
合計1740個出てきて、? でした。

前に色々いじったのが悪かった可能性がありますが・・・

697:デフォルトの名無しさん
09/10/29 16:47:37
>>696
すべての規定ライブラリの無視(/NODEFAULTLIB)を「はい」にしてないか?
いいえにしとけ

698:デフォルトの名無しさん
09/10/31 23:35:03
C++で初めてWxWidgetsを使ってプログラム書いてみています。
複数行のwxTextCtrlに、複数行の文を書いた状態で、GetLineText(0)のようにして、
任意の1行を取り出して、それをそのまま、wxMessageDialogでダイアログ表示させているのですが、
この1行が、半角のアルファベットの時などはきちんと1行全体が表示されるのですが、
この1行が、4文字以上の日本語の場合は、最後の文字だけが欠けて表示されてしまいます。
(例:あいう→あいう、あいうえ→あいう、あいうえお→あいうえ)

C++のほうも初心者ですのでどこか間違っているのかもしれませんが、
解決方法をご存知の方が居られましたら、教えていただけませんでしょうか。お願いします。

699:デフォルトの名無しさん
09/11/01 03:15:07
ソース貼れ

700:デフォルトの名無しさん
09/11/01 10:37:03
すみません。本当に質問そのままでしたのでソースを書きませんでした。失礼しました。
尚、開発環境は、Visual C++ 2008 Express Editionを使用しています。
wxWidgetsのバージョンは、2.8.10です。
以下、再現できるソースです。宜しくお願いします。

#include "wx/wx.h"
#include "wx/msgdlg.h"
class Test : public wxApp{
public:
virtual bool OnInit();
};
IMPLEMENT_APP(Test)

bool Test::OnInit(){
wxFrame *mainf = new wxFrame(NULL,-1,wxT("サンプル"),wxPoint(-1,-1),wxSize(300,250),wxCLOSE_BOX | wxSYSTEM_MENU | wxCAPTION);
mainf->Show(TRUE);
wxTextCtrl *inp = new wxTextCtrl(mainf,-1,wxT("あいうえお"),wxPoint(0,0),wxSize(-1,-1),wxTE_MULTILINE,wxValidator(),wxT("Form0"));
wxMessageDialog *d = new wxMessageDialog(NULL,inp->GetLineText(0),wxT("サンプル"),wxOK,wxPoint(-1,-1));
d->ShowModal();
return TRUE;
}


701:デフォルトの名無しさん
09/11/01 11:56:49
見てみた。
EM_LINELENGTHがマルチバイトの文字でも文字数を返すのに
バイト数で確保してるせいだね。
あいうえお→5にNULL文字1+長さ指定のための2バイト確保で8バイト分しか用意してないから
「あいうえ」になるみたい。

702:デフォルトの名無しさん
09/11/01 12:19:22
なんか状況によるみたい、ググってもデバッグ環境での違いとかよくわからん。
UNICODE文字セットだとうちでは問題でないけど、どうかな?
manifest書けばいいのかもしれないが。

703:デフォルトの名無しさん
09/11/01 13:22:08
>>701
ありがとうございます。そういう原因でしたか。
素人なりに、EM_LINELENGTHまわりの処理をしているようなコードがないかと考え、
wxWidgetsのファイルを探したのですが、よくわかりませんでした・・・。
GetLineTextを使うのを諦めて、他に違う方法を考えるしか無いでしょうか?

704:デフォルトの名無しさん
09/11/01 14:31:27
ファイルの場所は、こないだ出たwindow.cppと同じくsrc/msw/にあるtextctrl.cppね。
XPの途中(SP2以降)から仕様変更ってほんまかいな。
うちで試したのはVista64で、たしかに文字数が返ってきてた。

そういやimm~もLibのリンク不要版書いたけど、見たい人いるかなあ。

705:デフォルトの名無しさん
09/11/01 15:07:19
UNICODE版に汁

706:デフォルトの名無しさん
09/11/01 15:57:38
>>705
アドバイスありがとうございます。
setup.hで、wxUSE_UNICODEを1にしてビルドしたところ解決しました。
これでwxWidgetsの内部処理がUNICODEになったと考えて良いのでしょうか?

707:デフォルトの名無しさん
09/11/02 08:42:01
URLリンク(zetcode.com)

708:デフォルトの名無しさん
09/11/02 11:31:25
URLリンク(zetcode.com)

709:デフォルトの名無しさん
09/11/02 13:55:43
>>706
そうだけどサロゲートペアには対応してないっぽい

710:658
09/11/02 15:10:21
>>697
久しぶりにプログラミング再開しました。



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

すべての規定ライブラリの無視(/NODEFAULTLIB)は
いいえのままでしたが、
何かとごっちゃになって、無視するライブラリにLIBCMT.libとかがありました。
とりあえず、できた奴を他のパソで起動してみます。


711:デフォルトの名無しさん
09/11/03 22:57:11
どうも。wxWidgets2.8.10、Unicnde Buildを使っているのですが、ShiftJIS->Unicode、Unicode->ShiftJISを一発でするにはどうするばいいですか?
どうもEncodingConverterクラスはchar/wcharでの変換しか想定していないようなのです。(wxStringを返すことも出来るようなのですが、実際にやると実行時にエラーになりますorz)

712:デフォルトの名無しさん
09/11/03 23:11:52
Linux版使ってるひと?

713:デフォルトの名無しさん
09/11/04 00:06:11
>>712
実行時環境を書き忘れていました。実行時環境はWindowsXP SP3です。

具体的なエラー内容は、WXDEBUGをdefineしてビルドするとwxAssertが働いて、wxEncodeConverter::Init()を使用前に呼び出しているにも関わらず「Init()で初期化してください」と表示されるのです。(リリースビルドでも失敗します。)

714:デフォルトの名無しさん
09/11/04 00:29:22
>>713
俺はWIN32 APIで変換してるよ。手順がチトややこしいので、無名名前空間内に変換用の関数を
書いたヘッダファイルを用意して使ってる。細かい方法は仕事場に行かないと書けないので、
明日にでも...


715:デフォルトの名無しさん
09/11/04 01:47:45
WCHAR *SJIS2WCS(string sjis)
{
if(sjis == "") return NULL;
int wlen = MultiByteToWideChar(CP_ACP, 0, sjis.c_str(), -1, NULL, 0);
WCHAR *wbuf = new WCHAR[wlen + 1];
if(wbuf == NULL) return NULL;
*wbuf = L'\0';
if(MultiByteToWideChar(CP_ACP, 0, sjis.c_str(), -1, wbuf, wlen) <= 0){
delete [] wbuf;
return NULL;
}
return wbuf;
}
string WCS2SJIS(WCHAR *wbuf)
{
if(wbuf == NULL || wbuf[0] == L'\0') return "";
int slen = WideCharToMultiByte(CP_ACP, 0, wbuf, -1, NULL, 0, NULL, NULL);
char *sbuf = (char *)_malloca((slen + 1) * sizeof(char));
if(sbuf == NULL) return "";
*sbuf = '\0';
if(WideCharToMultiByte(CP_ACP, 0, wbuf, -1, sbuf, slen, NULL, NULL) <= 0) return "";
sbuf[slen] = '\0';
return sbuf;
}

716:714
09/11/04 09:51:54
おぉ,先に書いてくれましたね。私の使っているコードも殆ど同じ。
一旦,必要なバッファの長さを取得してからもう一度同じ関数で変換する必要があるのがミソ。
C++的には >>715 の関数をstaticな大域関数にするのではなく,

namespace {
WCHAR* SJIS2WCS(string sjis)
{
//中身
}
}

のように無名名前空間に入れたヘッダファイルを用意して,この関数を利用するソースモジュール
からインクルードして使うのが良いようです(参考書なんかによく書いてある)。

717:デフォルトの名無しさん
09/11/04 15:39:45
>>716
ありがとうございました。

718:デフォルトの名無しさん
09/11/04 21:13:49
>>716
ヘッダファイルに関数の中身まで書くの抵抗あるんだけど
C++だと書いて良いというかそういうもんなの?

719:デフォルトの名無しさん
09/11/04 22:38:43
>718
翻訳単位毎に実体ができちゃうから抵抗があるというのは正しい感覚だと思われ。
ヘッダをインクルードしただけで使いたいってんなら自分なら inline にしておくかな。

720:716
09/11/04 23:38:45
>>719

> 翻訳単位毎に実体ができちゃうから抵抗があるというのは正しい感覚だと思われ。
> ヘッダをインクルードしただけで使いたいってんなら自分なら inline にしておくかな。

おっしゃる通りで...
無名名前空間でヘッダファイル内に定義して、それを異なる翻訳単位で複数使うと、
中身が同じオブジェクトファイルが複数できてしまうよね。

異なる翻訳単位でも共通に使えるようにするのなら、コード効率を考えなければinlineに
するのが良いだろうし、コード効率を重視するのならシングルトンパターンでも使って、
実体が一つしかできないようにしてクラスにするのが良いと思われ。

昔のC流でグローバルな関数にするのが一番簡単だったりして...


721:デフォルトの名無しさん
09/11/05 05:33:21
inline にしておけば翻訳単位ごとに実体ができようが
リンク時に1つにまとめられるぜ

722:デフォルトの名無しさん
09/11/05 06:16:24
多分、最適化のこともインラインのことも勘違いしてるんだろうね。

インライン展開とは、関数を実行したのと同じ「意味」になる処理を呼び出し側に埋め込んで
関数呼び出しのコストを無くすことであって、
「意味」を変えないためには>>526のようなことが必要になる。
これは最低限の自分の存在理由を満たしているだけであって、「最適化」などではない。

一方、彼の考えるインライン展開は、引数として渡した「記述」を切り貼りして
コードの姿を組み立てて、それを呼び出し元に貼り付ける、というような物らしい。
でも、それはマクロがやってることだ。

マクロといえば、簡易的なLisp処理系を作って、強力と名高いLispのマクロを実装してみると、
このへん勉強になるかもね。
Lispの言葉でいうなら、C++の関数は「引数はすべて評価してから関数に渡される」。
つまり f(g(), h());の時、fが受け取る(そして扱う)のは「g()の戻り値」と「h()の戻り値」。
だからインライン展開するにあたって、>>526のようにすることでそれを実現する。
それに対して、Lispのマクロは「引数を評価せずに渡し、戻り値で呼び出し側を置き換える」。
こっちが彼の考えるインライン展開に近い。



723:デフォルトの名無しさん
09/11/05 06:40:41
???

526 :デフォルトの名無しさん [sage] :2009/10/06(火) 21:04:39
no problem

724:716
09/11/05 08:30:56
>>722
そもそも誰に対するレス? アンカーも間違ってるので,言っていることがイマイチよくわからん。


725:デフォルトの名無しさん
09/11/05 10:30:25
>>721

> inline にしておけば翻訳単位ごとに実体ができようが
> リンク時に1つにまとめられるぜ

それはないだろう。
もうしそうだとすると、inline関数の呼び出し時に、通常関数の呼び出しと同じように
呼び出しアドレスや引数がスタックに積まれることになってオーバーヘッドが大きく
なってしまうから、inline関数の意味がなくなってしまう。

そもそもその話の出典はどこ?

726:デフォルトの名無しさん
09/11/05 13:15:10
スレリンク(tech板)

727:デフォルトの名無しさん
09/11/05 14:20:58
>>721, >>726

なぁんだ、>>722はSTLスレのコピペだったのか。
(STLスレのinlineの話は長すぎて読みきれん!)

で、>>721だけど、inline関数の中から呼び出される関数の実体は一つにまとめられる
と言いたいのかな?それともコンパイラがインライン展開できなかったときは一つに
まとめられるという話かな?

ANSI C++規格書の7.1.2の2と4にそのあたりのことが書いてあるけど、俺の英語力では
「inline関数への呼び出しはリンク時に一つにまとめられる」とは読めないなぁ。

仮にまとめられるとすると、スタックを使わないでどうやってその関数を呼び出すの?
「inline関数を使うと、スタックによる関数呼び出し手続きを省くことができるので、
オーバーヘッドを省くことが出来る」と、多くの参考書等にも書いてあると思うが。

728:デフォルトの名無しさん
09/11/05 15:23:16
レジスタ渡しで呼ばれてるんだろうなw

729:デフォルトの名無しさん
09/11/05 15:59:45
それは最早呼び出し規約(fastcall)の話であってinlineじゃないな…w
つか、wxWidgetsのスレでやる話なんだろうか

730:デフォルトの名無しさん
09/11/05 16:03:57
>>728
wが付いてるから冗談だということで...

>>729
んだね。スマソ

731:デフォルトの名無しさん
09/11/08 15:50:36
wxWidgets用のGUIビルダーやRADツールで、カスタムウィジット(例えばwxCodeに登録されているウィジット)を
登録して、ペタポトできるようにする仕組みを持ってるものってある?

あったら具体的に教えてもらえると嬉しい。

732:デフォルトの名無しさん
09/11/08 18:14:35
XRCed

733:731
09/11/08 22:45:41
>>732
サンクス。XRCedリソースエディタとしてC++用にも使えるんですよね。
まだ試してないんですが、やってみます。

734:デフォルトの名無しさん
09/11/09 13:20:51
XRCed使ってみた。巷で言われる「癖のある使い勝手」はsizerベースであることを考えれば
オレは気にならないけど,イベントハンドラの名前すら記述できないし,xrcしか出力できない。

wxrc使っても,これじゃ結局イベントハンドラそのものと,イベントとイベントハンドラを接続
するコードは手書きするしかないんじゃないの? オレには向いてないみたい。

735:デフォルトの名無しさん
09/11/09 18:27:47
すいません・・・
今、wxStringの文字列を、C言語のchar型に変換する方法を探ってるのですが、
なかなか見つかりません・・・

static char *C文字列;

で宣言したのを、

C文字列 = wx文字列(wxConvUTF8);

とやったら、

1>xxx.cpp(562) : error C2440: '=' : 'const wxChar *' から 'char *' に変換できません。
1> 変換で修飾子が失われます。

と言われた所です。

736:デフォルトの名無しさん
09/11/09 18:56:13
そもそもconstを非constに暗黙の変換はできない
C言語(C++ですらない)の教科書に当たるか
const_castでググるべし

737:デフォルトの名無しさん
09/11/09 20:59:45
テキストボックスでRead Onlyなのに日本語入力だと普通に書き換えられるのは仕様なの?

738:デフォルトの名無しさん
09/11/09 23:36:34
>>735
c_str()

739:デフォルトの名無しさん
09/11/10 00:11:36
>>735
Unicodeビルドか?Ansiビルドか?
話はそこからだ。

740:デフォルトの名無しさん
09/11/10 04:25:02
overviewsの wxMBConv classes overview, Unicode support in wxWidgets,
それから wx/strconv.h あたりを読むよろし。

741:735
09/11/10 17:11:59
const char 変換物;

変換物 = 変換元.c_str();

char *変換物 = const_cast<char*>(変換物);



ってやれば、とりあえずコンパイルは通りました。
ありがとうございます。

const charでやっといて、const付きで変換して、
あとではずすって感じですね。


んで、今度は文字コードが上手くいってないんですが・・・
コンパイルはVC++で、文字セット「設定なし」です。
一体どうすれば・・・

742:デフォルトの名無しさん
09/11/10 17:25:42
どういうコードでどういうデータを使ったらどううまくいかないのさ

743:デフォルトの名無しさん
09/11/10 22:36:10
>>741
char *変換物 = const_cast<char*>(変換物);
変換元が無くなったら死ぬよね

744:デフォルトの名無しさん
09/11/11 00:22:46
>>741
質問するならもっと詳しく書け。
そんな質問じゃエスパーが現れるまで誰も答えられん。

745:デフォルトの名無しさん
09/11/11 03:23:39
ただの愚痴だな
質問ですらない

746:デフォルトの名無しさん
09/11/11 10:37:13
>>741
コンパイル通ればいいてものじゃないでしょ。
char *p = strdup(unicode_string.c_str());
とでもすればいいのに。
あと、文字セットは Unicode か MBCS(マルチバイト文字)
じゃなきゃ駄目だと思うよ。
wxWidgets 使うなら Unicode でがんばって。

747:デフォルトの名無しさん
09/11/11 10:51:51
みんな wstring って使ってる?

748:デフォルトの名無しさん
09/11/11 16:12:34
wxWidgetsは、どう発音するの?
ダブリュ・エックス・ウィジッツ?

既出かもしれないけど教えて。

749:デフォルトの名無しさん
09/11/11 16:36:55
日本人相手なら普通はダブルエックス・ウィジェッツ
でいいんじゃね?

750:デフォルトの名無しさん
09/11/11 16:42:32
>>749
ありがとう

もしかしたら、ウィックスウィジェッツとか発音するのかと思ってた。


751:デフォルトの名無しさん
09/11/12 12:45:23
>>748
URLリンク(www.youtube.com)

この00:09の所でダブリュ・エックス・ウィジッツと発音してるね。

752:デフォルトの名無しさん
09/11/12 16:47:45
2.9.0になって中身がだいぶ変わったな
今までのがビルド通らないし、動きもしない・・・
バグじゃなくて仕様変更だからしょうがないんだけど。

753:735
09/11/16 14:46:14
解決しました。ありがとうございます。

754:デフォルトの名無しさん
09/11/25 10:37:38
Visual C++ 2008 Express EditionでwxWidgets2.8.9を使用しているのですが、
wxURLを使おうとすると、リンクするときにどうしてもエラーになってしまいます。
(そもそも、wxURLを書いただけでエラーになります。
wxURL以外は幾つかしか使っていないのですが、普通にうまく動きます。)

test.obj : error LNK2001: 外部シンボル ""public: virtual __thiscall wxURL::~wxURL(void)" (??1wxURL@@UAE@XZ)" は未解決です。
test.obj : error LNK2001: 外部シンボル ""public: __thiscall wxURL::wxURL(class wxString const &)" (??0wxURL@@QAE@ABVwxString@@@Z)" は未解決です。
****\****.exe : fatal error LNK1120: 外部参照 2 が未解決です。

初心者で、解決しようにも原因さえわからないのですが、
アドバイスを宜しくお願いします。

以下、再現できるコードです:
#include "wx/wx.h"
#include "wx/url.h"
class MyApp : public wxApp{
public:
virtual bool OnInit();
};
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit(){
wxURL url(_("URLリンク(example.com)"));
return TRUE;
}


755:デフォルトの名無しさん
09/11/25 11:40:44
>>754
普通に通るけど、、、ライブラリは自分でコンパイルしたやつ?
バイナリ使ったのならどれかな?

756:デフォルトの名無しさん
09/11/25 13:21:44
>>755
ありがとうございます。結構前に入れたものなのでよく覚えていないのですが、
wxMSW-2.8.9-Setup.exeをダウンロードしてインストールし、
build\msw\wx.dswを、VC++ 2008 Expressで開いて、「ソリューションのビルド」をしたものだと思います。

757:デフォルトの名無しさん
09/11/25 13:35:02
>>755
すみません・・・。
URLリンク(freepg.fc2web.com)
をなどを参考にして環境を構築していたのですが、
自分のPCにある、lib\vc_libを見て、「追加の依存ファイル」に無いファイルがあることに気づき、
とりあえずwxURLと関係のありそうな、wxbase28_net.libがありませんでしたので、
それを、プロジェクトのプロパティで、追加の依存ファイルに追加したところ、
エラーが出ずに、ビルドができました。とりあえずエラーは出ないようになったので先に進めます。
初心者の質問につきあっていただき、ありがとうございました。感謝しています。

758:デフォルトの名無しさん
09/11/25 14:02:57
関係ないけど
追加の依存ファイルの入力枠って
なんであんなに使いづらいんだろう

759:デフォルトの名無しさん
09/11/25 14:05:11
使いづらいよねw
#pragma comment使えってことなのかなあ。

760:デフォルトの名無しさん
09/11/25 14:41:33
includeパスもlibパスも使えねー
嫌がらせだろあれはw

761:デフォルトの名無しさん
09/12/02 16:13:55
>wxDev-C++
をインスコしたら、
>C:\Program Files\Dev-Cpp
フォルダに、
vcl60.bplとかrtl60.bplがあるみたいなんだけど、
これってC++ Buider か何か?

762:デフォルトの名無しさん
09/12/02 16:19:04
うん

763:761
09/12/02 16:28:52
嬉しいけど、
C++ Builder を購入してる自分的には、
2種類のソフトと思ってたのが実は1種類みたいに思えて、
損した気分w


764:デフォルトの名無しさん
09/12/02 16:51:31
えっ

765:デフォルトの名無しさん
09/12/02 17:10:36
えっ

766:デフォルトの名無しさん
09/12/02 17:43:44
それはあれだぞ
WindowsのゲームはDirectX使ってるから実は1種類だ!!
って言ってるのとかわらんぞ・・・?

767:デフォルトの名無しさん
09/12/02 17:51:31
それじゃドズ1種類じゃね?
他に、ウィィとかP$3買えば3種類

768:デフォルトの名無しさん
09/12/03 11:43:52
wxwidgetsのデザイナ入ってるIDE、codeblocksとかwxdevとかで
デバッグ機能を使って、STLのvectorとかlist使った配列の中身見れるやつある?



769:デフォルトの名無しさん
10/01/02 21:37:55
win32api と wxWidgets の違いって何?

wxWidgets でクロスプラットフォーム GUIアプリを作ろう
URLリンク(0xcc.net)

↑を見るとwin32をラッパしているだけ、と書いてあるのだが
windows限定で開発している俺には何もメリットない認識でおk?

770:デフォルトの名無しさん
10/01/02 23:25:16
MFCで開発してる奴が少ない労力でLinuxやMacで動かせるようになる点がメリット。
ということは、どういうことか分かるよな?

771:デフォルトの名無しさん
10/01/03 22:27:34
文字列扱いやすいし,windowsだと冗長になってしまうコードも
簡潔に書けるってのもいいんじゃない?

772:デフォルトの名無しさん
10/01/03 23:33:40
文字列扱いやすいなんてのはSTLやMFC使えば一緒だよ

773:デフォルトの名無しさん
10/01/04 00:10:00
そう?MFCは使ってないからなんとも言えないけど
STLやQtとか他のライブラリと比べると操作関数が豊富だったと思う
所詮好みの問題だけどさ

774:デフォルトの名無しさん
10/01/04 01:42:25
詳しい文書があり、またPythonで使えるのも良い。
GUIの挙動とか確認したい時に一々コンパイルせずともPythonでトライアンドエラー出来るのは楽。

775:デフォルトの名無しさん
10/01/07 01:10:00
SSLのソケットは簡単に作れないですかね。
クライアント・サーバどちらも使いたいんですが。

776:デフォルトの名無しさん
10/01/07 02:46:55
URLリンク(wxssl.sourceforge.net)
ちなみに中身はまったくみていない

777:デフォルトの名無しさん
10/01/07 04:43:06
求)リードプログラマー
か・・・

778:デフォルトの名無しさん
10/01/10 07:28:10
>>769
Code::BocksのwxSmithやwxFormBuildeや、wxDev-C++みたいな
ポトペタRADツールを使うと、MFCよりサクサク開発できる。
MFCは書かなきゃならないコードが多すぎる。

779:デフォルトの名無しさん
10/01/22 02:33:04
>>769
何もメリットないってことはないけど、俺ならクロスプラットフォーム
でもないのにあえてwxWidgetsを選ぶことはないな。

780:デフォルトの名無しさん
10/01/22 03:26:04
Win32API とか MFC のダサさを回避したいときには
敢えて wxWidgets や Qt4 とか使うのは間違いではないよ

781:デフォルトの名無しさん
10/01/22 12:43:16
同感。C++ Builderは既に死に体だし。

> 敢えて wxWidgets や Qt4 とか使うのは間違いではないよ

最近の流れだと wxWidgets は Qt に比べて分が悪いね。
Qt より単純で好きだったんだけど。

782:デフォルトの名無しさん
10/01/22 13:20:52
wxWidgetsは、気に入らない部分を書き換えてビルドできちゃうところがいい

783:デフォルトの名無しさん
10/01/22 16:24:55
スタティックリンクも出来るし

784:デフォルトの名無しさん
10/01/23 00:03:56
3.0まだぁー?

785:デフォルトの名無しさん
10/01/23 00:06:43
>>779
で、何選ぶの?

786:デフォルトの名無しさん
10/01/26 12:08:16
>>785
この流れでは言いにくいけど俺はC++Builder。


787:デフォルトの名無しさん
10/01/26 12:58:26
俺は逆にC++ Builderから逃げようとしている。
Borland⇒CordGear⇒Embarcaderoと母体が変わるうちにどんどん品質低下。
バグを充分に修正しないまま次期バージョンを発売してしまう。
メチャクチャな翻訳やリンク切れ満載のヘルプの酷さは見るに耐えない。

以前は沢山カキコのあったMLも超閑古鳥。
問い合わせしても自分で答えずに一般人のHPのURLをメールに貼って
「ここに情報があります」と言うヒドいサポート。

最新バージョンへの優待バージョンアップも申し込みが少なかったらしく,
昨年末までだった予定を一ヶ月延長する情けなさ。
トライアル版使ってみれば,バージョンアップする気がなくなるw

Windows限定なら使いやすくて仕事が速く出来る最高の製品だった
はずなのに,こんな製品に誰がした!

QtをNOKIAが買ったように,どこかの大きな会社が買ってくれんかな。
wxWidgetsもどこかがバックに付かんかな。

788:デフォルトの名無しさん
10/01/26 14:47:56
同意

789:質問
10/02/05 12:50:49
wxPythonを使っているのですが、
wx.media.MediaCtrlでマウスクリックのイベントから関数をコールバックすることはできないのでしょうか?
もしできないのでしたら、親ウィジェットでマウスクリックのイベントを受け取ることはできるのでしょうか?

790:デフォルトの名無しさん
10/02/05 15:54:21
>>787
どこもバックに付かないから良いんじゃまいか

791:質問
10/02/06 00:14:07
すみません、解決しました。

792:デフォルトの名無しさん
10/02/06 17:38:58
wxString strを
cout << str << endl;
という風に出力したいんだけど、コンソール入出力用のストリームってある?

793:デフォルトの名無しさん
10/02/06 17:42:12
ここには人はいませんよ。ばいばいさるさん。

794:デフォルトの名無しさん
10/02/06 18:35:55
よく分かってないけど自己解決

795:デフォルトの名無しさん
10/02/07 00:44:24
VC++2008EE+wxに越してきたのですがUnicode Releaseってのがあるのですが
やっぱりこっちの方がいいんですかね?

796:デフォルトの名無しさん
10/02/08 00:21:46
あんまり人いないのかな?

797:デフォルトの名無しさん
10/02/08 00:32:22
Qtに引越ししつつある

798:デフォルトの名無しさん
10/02/08 00:35:47
>>796
枯れてきたから使用者が多くても質問者は少ないんだろ。

799:デフォルトの名無しさん
10/02/08 00:39:46
>>797>>798
そうなのか
Qtの方ってOSが搭載してるブラウザコアを組み込んで使えたりするのかな?

wxのHTML処理関連は素のHTMLは問題なさそうだけどcssが駄目そうだし

800:デフォルトの名無しさん
10/02/08 01:02:14
QtにはWebKitが付いたんだっけ?

801:デフォルトの名無しさん
10/02/08 01:05:52
wxの話では盛り上がらないけど
Qtの話になると盛り上がるwxスレ

802:デフォルトの名無しさん
10/02/08 01:07:42
Monoで作るというのもあるよ
あれだとC#でかけるのでC++の糞構文に悩むこともない
ただMSの動きとかもろももろでどうなるかなんだよね

803:デフォルトの名無しさん
10/02/08 01:11:26
Qt で書かれたアプリはときどき見かけるけど
wx で書かれたのってあまりお目にかからない
どんなのがあるの?

804:デフォルトの名無しさん
10/02/08 01:14:24
>>803
python製アプリ見ればほとんどwxだよ。

805:デフォルトの名無しさん
10/02/08 01:25:36
休みを利用してwx関連をいろいろ試したけどGUI関連のツールが微妙だな
ネットで調べるとすぐにでてくるwxGladeとかもうね・・・

806:デフォルトの名無しさん
10/02/08 01:35:40
まぁ、GUIなんて手で書けばいいし

807:デフォルトの名無しさん
10/02/08 03:16:08
wx で GUI 独立設計したいなら XRCed がいいよ

808:デフォルトの名無しさん
10/02/08 11:11:06
>>795
あんまり頻繁に見ていないんだ、ごめんよ。
で、Windows で使うなら UnicodeRelease/UnicodeDebug でいいよ。
むしろそれ以外は気にしてはいけない。
static か DLL かは好みで。


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