• 締切済み

VC++MFCのC2039errorの対処法

vc++のプログラムでedit controlにおいて,ボタンを押したらエディットボックスに書き込んだ値を読み込むプログラムを書きました. void CSerialcommunicationDlg::OnBnClickedwritebutton() { CString ss; m_writeEdit.GetWindowTextW(ss);//writeedit値を読み込み CString m_writeEdit } そうしたところ,以下のようなエラーが出てきてしまいました. 1>c:\users\documents\visual studio 2008\projects\ex1\ex1\ex1dlg.cpp(190) : error C2039: 'GetWindowTextW' : 'ATL::CStringT<BaseType,StringTraits>' のメンバではありません。 1> with 1> [ 1> BaseType=wchar_t, 1> StringTraits=StrTraitMFC_DLL<wchar_t> 1> ] このエラーへの対処方法となぜこのエラーが発生しているのかを教えていただきたいです. このコードはvc++のテキストに書いてあるとおりにやったのですが,なぜできないのか分かりません.プロジェクトをつくるときの設定か,プロパティに問題があるのでしょうか。

みんなの回答

回答No.2

m_writeEdit の宣言はどうなってるんでしょう? コメントにあるように、 > CString m_writeEdit と宣言されてるなら、CStringのメンバにGetWindowTextWは無いので、当然エラーになります。 -- > なぜできないのか分かりません. そのテキストも、プロジェクトを作るときの設定も、プロパティも確認できない回答者には、分かりようもないです。 推測だと、大ざっぱなやり方としては、 ・エディットボックスのコントロールをCEdit型のメンバとして登録、GetWindowTextとかSwtWindowTextとかで文字をやり取り。 ・エディットボックスに入力されているテキストをDDXの機能なんかでCString型の変数に取得、あるいは変数から反映。 ・その両方を併用。 とかです。 テキストの書籍が正しいのなら、エディットコントロールに対するメンバを追加する際に、CEditでなくてDDXを使うCStringで追加しちゃってるとか? テキトーに探したサイトの設定画面(VC++6.0くらいかな?)だと、 makandatの基地 - DDX/DDV http://www7b.biglobe.ne.jp/~makandat/VC/Group5/DDXDDV.htm の図3の方法でコントロールを登録すべきだったところ、図2の値に対応した変数を登録したとか。

回答No.1

GetWindowTextWはUNICODE文字列へのポインタを引数に要求します。 一方、CStringは、コンパイル時の設定によって、char_tかwchar_tになります。 コンパイル時に「CStringがchar_tになるモード」でコンパイルしていれば、GetWindowTextWに渡しているssが「引数の型があわない」のでエラーになります。