はじめまして。
まだVCを始めたばかりなので質問の内容がおかしいかもしれませんがお付き合い下さ
い。よろしくお願いします。
現在、VCでアプリケーションプログラムの作成(修正)をしているのですが、処理と
してはシリアル通信で基板から吸い上げたデータをウィンドウ上に展開するといったも
のです。このプログラムにおいて今回、追加機能としてシリアル受信(データ吸い上
げ)中にプログレスダイアログを用いて進行状況を表示させたいと思い、プログレスダ
イアログのコンポーネントを既存のワークスペースに挿入しました。ですが、肝心のシ
リアル受信処理を行っているソースにprogdlg.hをインクルードしても下記のようなエ
ラーになってしまい定義することができません。
error C2504: 'CDialog' : 定義されていない基本クラスが宣言されています。
error C2061: 構文エラー : 識別子 'CWnd' がシンタックスエラーを起こしました。
error C2065: 'CG_IDD_PROGRESS' : 定義されていない識別子です。
error C2057: 定数式が必要です。
error C2146: 構文エラー : ';' が、識別子 'm_Progress' の前に必要です。
error C2501: 'CProgressCtrl' : 識別名を宣言するのに、型が指定されていません。
error C2501: 'm_Progress' : 識別名を宣言するのに、型が指定されていません。
error C2061: 構文エラー : 識別子 'CDataExchange' がシンタックスエラーを起こしました。
error C2143: 構文エラー : ';' が '}' の前に必要です。
他のソースでは問題なくインクルードできるものもあります。
根本的にどこが間違っているのか、どの辺りを見直したらいいのか分かる方がいました
ら教えて頂ければ幸いです。よろしくお願いします。
よくわからないんですけど、肝心のシリアル受信処理を行っているソースに
stdafx.h (CDialog は afxwin.h) とかインクルードされていないのでそうなると思います。
CG_IDD_PROGRESS は resource.h かな
背景がわからないので何ともいえませんが(推測です)
シリアル受信処理 のファイルを progdlg へインクルードするのが普通だと思います。
ダイアログでデータの吸い上げの関数を呼んで、プログレスバーを操作した方が簡単だ
と・・・
多分、受信状況を確認する何らかのインターフェースがあるはずなので
それでプログレスバーを操作すればいいと思います。
# メッセージ, イベント, 受信データ数確認の関数 とかかな
あと、MFC/SDK, スケルトンの種類(SDI, MDI, ダイアログ等), OS の種類, VC のバージョン
など書き込んだ方がいいですよ。
Takahashiさん返信ありがとうございました。
アドバイスを元にもう一度やってみます。
あと、今後書き込む際にはもう少し詳しくこちらの情報を掲示するようにしますね。
ご指摘どおり下記のヘッダーファイルをシリアル受信処理のソースにインクルードした
のですが、エラーが出てしまいました。
●追加インクルードファイル
#include stdafx.h
#include afxwin.h
●エラー内容
c:\program files\microsoft visual studio\vc98\mfc\include\afxv_w32.h(14) :
fatal error C1189: #error : WINDOWS.H already included. MFC apps must not
#include <windows.h>
resource.hについては問題なくインクルードできました。
ちなみにこちらの環境を補足しますと、ベースはMFCでOSはWindowsXP,VCのバージョン
は6.0になります。
アドバイスよろしくお願いします。
とりあえず、エラーメッセーの言う通りにしてみるべきでしょう。
プロジェクトの作成手順から
1.「MFC AppWizard(exe)」-「MDI」で作成
2.「コンポーネントギャラリ」の「プログレスダイアログ」を選び挿入
3.ビルドしてもエラーはでない
4.cppのソースを追加してみる
#include stdafx.h
#include resource.h
#include ProgDlg.h
void abc(void)
{
CProgressDlg Dlg;
Dlg.Create();
}
5.ビルドしてもエラーはでない(CProgressDlgの使い方は知らないので問題あり)
#include stdafx.hは位置が大切なので、ソースの先頭に書く
afxwin.hの方は不要
現在のエラーは「プリコンパイル済みヘッダーを使用しない」を選んでいませんか?
そしてstdafx.hより前にwindows.hをインクルードしているとか?
原因が上記であるなら
状況にもよりますが、まずはいったん元プロジェクトに戻して作業をしなおすのがよいでしょう
元々あったプロジェクトで「プリコンパイル済みヘッダーを使用しない」を選んでいたら
それは必要な事かもしれないので、MFC関連は別ファイルに書くのがよいのかもしれない
dairygoodsさん、ありがとうございます。
エラーメッセージの言う通りにということですが、既にインクルードされている
<windows.h>の定義を解除してみればよいのでしょうか?試しに解除してみたところ、同
じエラーメッセージでした。
kuさん、ありがとうございます。
#include stdafx.hをソースの先頭に入れてみましたがダメでした。ちなみ
にwindows.hよりも前に定義してやってみました。
また、「プリコンパイル済みヘッダーを使用しない」を選ぶ場所なのですが、どこにあ
るのか教えて頂ければと思います。
ど素人なもので大変恐縮なのですがよろしくお願いします。
> #include stdafx.hをソースの先頭に入れてみましたがダメでした。
下の設定と対の可能性がありますので、こちらを試してください
1.プロジェクトの設定で、まず「設定の対象」をすべての構成を選ぶ
2.「+Source Files」の「+」をクリックして開く
3.目的とするファイル「~.cpp」を選ぶ
4.「C/C++」タブを選ぶ
5.カテゴリ「プリコンパイル済みヘッダー」を選ぶ
6.プリコンパイル済みヘッダーファイル(.pch)を使用を選ぶ
です
元々「プリコンパイル済みヘッダーを使用しない」を選んでいた事に意味があるのなら
別の方法を考える必要がありますので、要注意です
kuさん、ありがとうございます。
上記のアドバイス通り設定してみましたが上手くいきませんでした。
手順2.のところなんですが、既存のものがSource Files下にもう一つディレクトリが
あり、その中に目的のソースがあるのですが、この構成に何か関係ありますでしょう
か?
後、手順6.で「プリコンパイル済みヘッダーファイル(.pch)を使用」を選んだときに
入力フォームに「stdafx.h」が出力されたのですが、特に問題はありませんか?
ちなみに手順5.で「プリコンパイル済みヘッダー」を選んだ時は「プリコンパイル済
みヘッダーを使用しない」が選択されていました。
以上です。よろしくお願いします。
CProgressCtrl は、
#include <afxcmn.h>
が、必要です。
> 後、手順6.で「プリコンパイル済みヘッダーファイル(.pch)を使用」を選んだときに
> 入力フォームに「stdafx.h」が出力されたのですが、特に問題はありませんか?
問題ありません
よく考えたら先頭に
#include stdafx.h
と書いてあれば、うまくいくはずですね
オプションの設定は元に戻しておいてください
ファイルの先頭に
#include stdafx.h
と書いたときの、状態はどうなりますか?
(これを書いたときは#include <windows.h>も不要です)
kuさん、ありがとうございます。
ソースファイルの先頭に
#include stdafx.h
を追加し、#include <windows.h>をコメントアウトしてコンパイルしてみてるのです
が、相変わらず
c:\program files\microsoft visual studio\vc98\mfc\include\afxv_w32.h(14) :
fatal error C1189: #error : WINDOWS.H already included. MFC apps must not
#include <windows.h>
cl.exe の実行エラー
とアウトプットに表示されてしまいます。
先ほどのエラーの1つ上の行には何と書いてありますか?
(エラー元のファイルです。たぶん拡張子はcppだと思います。)
ファイル名を書きたくなければStdAfx.cppかxxx.cpp(シリアル受信のファイル)かでも良いで
す
1.プロジェクト全体のバックアップを念のためとっておいて
2.メニューの「ファイル」-「新規作成」で「C++ソースファイル」で
ファイルを追加してみてください
ファイル名はa.cppで
3.中身
#include stdafx.h
#include resource.h
#include progdlg.h
CProgressDlg Dlg;
4.リビルドする
これでエラーがでますか?でるとしたらどんなエラーがでますか?
kuさん、ありがとうございます。
先ほどのエラーの一行上ですが、自分で作成したxxx.cpp(StdAfx.hをインクルードしよ
うとしているソースファイル)です。
あと、アドバイス通り新規にa.cppを追加し、内容を上記のように設定してコンパイルし
たところ問題なくできました。
既存のソースのインクルードで何か邪魔しているものがあるのでしょうか??ちなみに
現在ソースファイルに定義してあるインクルードは以下の通りです。
#include Forcelib.h // 自作ヘッダー
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include define.h // 自作ヘッダー
#include proto.h // 自作ヘッダー
#include struct.h // 自作ヘッダー
#include Comunicate.h // 自作ヘッダー
#include resource.h
よろしくお願いします。
windows.h が入ってるぢゃん。