• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:errorC2228 CColorDialog)

エラーC2228の原因とは?VC6とVS2008の違いによるもの?

このQ&Aのポイント
  • 開発環境はVS2008です。VC6で作成したプロジェクトをVS2008に移行中です。しかし、エラーC2228が発生しています。エラーメッセージは「.DoModalの左側はクラス、構造体、共用体でなければなりません」というものです。初期値の代入がおかしいのでしょうか?VC6では正常に動作していました。
  • VS2008でVC6のプロジェクトを移行中ですが、エラーC2228が発生しています。エラーメッセージは「.DoModalの左側はクラス、構造体、共用体でなければなりません」というものです。初期値の代入が間違っているのでしょうか?VC6では問題ありませんでした。
  • VC6で作成したプロジェクトをVS2008に移行中ですが、エラーC2228が出力されます。エラーメッセージは「.DoModalの左側はクラス、構造体、共用体でなければなりません」となっています。初期値の代入に問題があるのでしょうか?VC6では問題なく動作していました。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

VS2008 は使っていないのであてずっぽで書きますが, _variant が型だとしたら CColorDialog dlg(__variant(GetValue())); が「関数 dlg の宣言」とみなされてアウト.

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • DLLでダイアログ

    VC++6.0にてMFCを使うDLLを作成しています。 関連HPを参考になんとかDLLを作ることが出来ました。 そこで今度はDLL側でダイアログボックスを作成して表示させようとしたところうまくいきません。 エラーも無くスルーされてしまいます。 こういう使い方は出来ないのでしょうか。 ↓DLL関数のソースファイルです。 ---------------------------------------------- #include "StdAfx.h" #include "Defs.h" #include "Func.h" #include "resource.h" #include "testdlg.h" #include "dlg2.h" int WINAPI DllFunc( CString &p_rcStr, CWnd *p_pcWnd ) { TestDlg dlg; Cdlg2 dlg2; dlg.ps = p_rcStr; dlg2.DoModal();//なにも出ない AfxMessageBox(p_rcStr);//コレはOK dlg.DoModal();//何もでない return TRUE; } --------------------------------------------

  • CFileDialogで保存したい

    VC++でMFCのCEditViewを利用して作るテキストエディタ(プロジェクト名:Cell Compiler)に、最初からついているやつとは別にテキストの保存機能をつけたいのですが、どうすればよいですか? とりあえずCell Compilerdoc.cppファイルの中に、下記のような関数を作ってみたのですが(作る場所違う?)、その後が分かりません。 void CCellCompilerDoc::OnFileSaveProject() { CFileDialog dlg( FALSE, "*.*", "test.cell",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"cellファイル (*.cell)|*.cell|All Files (*.*)|*.*||", NULL); if( dlg.DoModal() == IDOK) { dlg.GetFileExt(); dlg.GetFileName(); dlg.GetFileTitle(); dlg.GetPathName(); } } 多分、if文の中に、保存する処理を加えるのかな?と思っているのですが、どうですか?ちなみに上記のソース追加以外は、何もいじってません。よろしくお願いします。

  • VC++.NET DLLからのダイアログの表示

    こんばんは。 VC++.NETでDLLを作成しました。 内容はダイアログを表示させるだけの単純なもので DLLの種類はMFC拡張DLLで作成しました。 (CDIALOGを継承したクラスTESTDIALOGのコンストラクタ、デストラクタがあるだけのもの) これをテスト用の単純なMFCアプリケーションで呼び出したところ ダイアログを表示させることができましたが 別の複雑なアプリケーション(DLLからDLLを呼ぶなどしている)で 呼び出したところダイアログが表示されません。 コンパイルエラーなどもでないし 何がいけないのか分かりません。 呼び出し側ではメニューにイベントハンドラを作ってそこで TESTDIALOG dlg; dlg.DoModal(); としているだけなのですが・・・ (デバッガで追ったところMFCのdlgcore.cppのCDialog::DoModalの m_lpDialogTemplateNameが不適切なptrとなる辺りに原因はありそうなのですが何故そうなるのかわかりません。) どなたかダイアログが表示されない原因がお分かりになる方 よろしくお願いします。

  • VC++6.0で新しいウィンドウを表示したい

    VC++6.0のダイアログベースでプログラミングを行っています。 IDC_BOTTOB6が押されたら、IDD_ABOUTBOXを表示するようにしたいのですが、 うまくいきません。 // // DialogProc - ダイアログボックス プローシジャ // LRESULT CALLBACK DlgProc(HWND hDlg, UINT uMessage, WPARAM wParam, LPARAM lParam) { switch (uMessage) { case WM_COMMAND: switch(LOWORD(wParam)){ case IDCANCEL: TermApp(hDlg); if (hDll != NULL) // DLLロード済み? { FreeLibrary(hDll); // DLLのハンドラ開放 } DestroyWindow(hDlg); break; case IDC_BUTTON6: { CDialog aboutDlg(IDD_ABOUTBOX); INT_PTR nRet = -1; nRet = aboutDlg.DoModal(); // Handle the return value from DoModal switch ( nRet ) { case -1: { MessageBox(NULL,"Dialog box could not be created!", NULL, MB_OK); } break; case IDABORT: // Do something break; case IDOK:{ // Do something } break; default:{ // Do something } break;                 };                } 上記のようにプログラムしていますが、コンパイルは通るのですが、実行するとエラーで落ちます。 Debug Assertion Failed Program: C:/.....test.exe File: afxwin1.inl Line: 22 何か原因が分かりましたら、ご教授頂けると幸いです。 以上、宜しくお願いします。

  • switch文について

    下記のようなswitch文に もうひとつの変数 int tmp = Integer.valueOf(変数2).intValue();を代入したいのですが もう一つ代入できるのでしょうか?? 因みにswitch文にIF文を加えて変数を代入するのではなく switch文で複数の変数を使用したいのです。 どうぞよろしくお願いいたします。 なお、質問の意味が分からない、意図が伝わらない方は アドバイスはいりませんので 恐縮ですがアドバイスお願いいたします。 int lot = Integer.valueOf(変数1).intValue(); switch (lot) { case 1: out.print("OK"); break; case 2: out.print("NG"); break; default: out.print("エラー"); break;} }

    • ベストアンサー
    • Java
  • このプログラムを見てください(C言語) m( _ _ )m

    現在乱数を使ったプログラムを作っています。 下のプログラムでコンパイルではエラーがでませんが、実行するとデバッグエラーが出てきます。コンパイラにはbccを使っています。恐らく原因は別の関数でbに値を代入してそれをaに代入しているからだろうと思いますが、なぜこれがいけないのかが分かりません。 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <conio.h> int ran, a=1, b, c; void test(void){ b=8; } void main(){ srand(time(NULL)); a=b;//ここを無くすとなぜかエラーが出ない。 while(1){ ran=rand()%(a*2)+1; switch(ran){ case 1: c=1; break; case 2: c=1; break; case 3: c=1; break; case 4: c=2; break; case 5: c=2; break; case 6: c=3; break; case 7: c=3; break; case 8: c=4; break; } printf("%d",c);printf("何か押してください\n");getch(); } }

  • VC++ スレッドからDoModalへ

    いまさらですがVC++6.0でつまづいています MFCです AdlgクラスのダイアログのOnButtonA() からXXXスレッドを起動し そのXXXスレッドではcountを+1しつづけます。 そして別のダイアログ DDD10をDoModalで起動しそのDDD10 内のTextBoxの値にcount値を反映させて表示しようとしました 下記ソース内のAfxMessageBox(tmp);ではcount値は 更新されますが DDD10ダイアログ内のテキストボックス の値が変更されません m_gui_xfr_totalはDDD10のテキストボックスにつけた メンバー名です どなたかアドバイスをお願いします void ADlg::OnButtonA() { DDD10 dlg10 ; CWinThread *pThread = AfxBeginThread(XXX_thread_entry,(LPVOID *)this); dlg10.DoModal() ; } void XXX_Thread(){ CString tmp; unsigned int count=0; DDD10 dlg10; while(1){ count++; tmp.Format("%d",count); dlg10.m_gui_xfr_total.Format(tmp); AfxMessageBox(tmp); Sleep(1000); } }

  • 変数の代入について

    ダイアログベースで、ダイアログ1からダイアログ2を開きダイアログ1のエディットボックスのデータをダイアログ2に表示する下記コードを教わりました。 変更後のようにしても問題ないと思いましたが、'dlg' は定義されていない識別子です。とエラーが出ます。 どうしてなのかお教えていただきたいのですが、 よろしくお願いします。 <変更前> CSubDlg dlg2; dlg2.m_strText = strText; dlg2.DoModal(); <変更後> void CSubDlg::OnPaint() { m_strText = dlg.strText; ちなみにdlgはウィザードが作ったコードで、 CMainDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); ダイアログ1のことだと思うのですが。。。。 ************************** メインダイアログとしてCMainDlgを例にしますが、かなり割愛します。 このダイアログには、Editが貼り付けられているとします。Editコントロールに割り当てたIDをIDC_EDIT_INPUTだと仮定します。 DDXとかのデータ変換を使う方法もありますが、ここでは単にデータを取得します。 // // OKボタンが押された時の処理 // void CMainDlg::OnOK() { // データの取得 CString strText; GetDlgItemText(IDC_EDIT_INPUT, strText); CSubDlg dlg2; dlg2.m_strText = strText; dlg2.DoModal(); } class CSubDlg : pbulic CDialog { public: CString m_strText; // 親から渡される文字列を格納する変数 ・ ・ ・ ・ ・ }; あとは、CSubDlgのOnPaintでテキストを描画します。 void CSubDlg::OnPaint() { // テキストをクライアント領域の中央に描画 CRect rect; GetClientRect(rect); CPaintDC dc(this); dc.TextOut(m_strText, rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER); }

  • メッセージボックスが表示されないのですが?

    WIN98 VC++6.0 MFCにて mmmというプロジェクト名でウィザードに従いダイアログベースのPGを作りました。 下記のようにコードの2箇所にAfxMessageBox("3",MB_OK);を追加しましたが、どちらもメッセージボックスが表示されません。 どうしてなのでしょうか? お分かりも方是非教えてください。 ************************** BOOL CMmmApp::InitInstance() { AfxEnableControlContainer(); #ifdef _AFXDLL Enable3dControls(); #else Enable3dControlsStatic(); #endif CMmmDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); AfxMessageBox("3",MB_OK);//■追加 if (nResponse == IDOK) { AfxMessageBox("3",MB_OK);//■追加 } else if (nResponse == IDCANCEL) { } // ダイアログが閉じられてからアプリケーションのメッセージ ポンプを開始するよりは、 // アプリケーションを終了するために FALSE を返してください。 return FALSE; }

  • 共用体、混合型はサポートされないというエラーがです

    Microsoft VS2022でVC++を開発していたところ 下記①,②,③で"共用体名"をマネージ”プロジェクト名::MyForm” のメンバーとして定義できません。混合型はサポートされていませんというエラー(C4368)が発生します。対処法を教えてもらえないでしょうか(Microsoft VS2022) <MyForm.h> .. namespace プロジェクト名 {.. union AB { short int a_1; short int a_2; } .. .. class { union AB u_1;① union AB u_2;② union AB u_3;③ Myform_Load { } Myform_Paint { } }; }