プロが教えるわが家の防犯対策術!

VC++2005のMFCにてアプリケーションを作成しています。

一つのソリューション内に二つのプロジェクトA、Bが存在し、
プロジェクトAで発生したあるイベント(例:ボタン押下)にて、
プロジェクトBで作成したダイアログを表示させたいのですが、
実装したところ、下記コンパイルエラーが出てしまいます。
「error C2065: 'IDD_TEST2_DIALOG' : 定義されていない識別子です。」

現在のプロジェクトの設定としては、
・プロジェクトAの依存先をプロジェクトBに設定
・プロジェクトA選択状態で、
 「プロジェクト」→「プロパティ」→「構成プロパティ」
 →「C/C++全般」→「追加のインクルードディレクトリ」にて、プロジェクトBのパスを指定

と設定しているのですが、どこに問題があるのでしょうか?
もし問題があるようでしたら、正しい設定方法、また実装方法について、
お手数おかけしますが、ご教授お願いできませんでしょうか?

また下記にソースコード実装例を記載します。

【プロジェクトA(呼び出し側)】
#include "test2Dlg.h"//プロジェクトBのヘッダファイル
・・・
void Ctest1Dlg::OnBnClickedOk()
{
CDlgTest MyDlg;
MyDlg.DoModal();//プロジェクトBのダイアログ生成
}

【プロジェクトB(呼出され側)】
・リソースビューにて、ダイアログ(IDD_TEST2_DIALOG)の「クラスの追加」で、
 クラス名「CDlgTest」と指定

A 回答 (1件)

その構成には無理があると思います



別EXEのダイアログを表示したいってことですよね

プロジェクトBの中のResource.h で定義された IDD_TEST2_DIALOGが
プロジェクトAの中のどこかで定義されていない限り質問のようなエラーになるでしょう

この問題が解決できたにせよ
今度はプロジェクトBのダイアログ用のリソースが プロジェクトAには
存在しません
したがって CDlgTestのインスタンス MyDlgを初期化しようとした時点で実行時エラーになるでしょう

リソースビューでプロジェクトBのダイアログを選択 編集 > コピー
プロジェクトAを選択 編集 > 貼り付け
でリソースをコピーします

プロジェクトBの CDlgTestクラスのソース および ヘッダーをプロジェクト Aにコピー
として 構築されることをお勧めします

別の方法としては プロジェクトBをDLLとして構築する方法がありますが
ここですべてを説明できるものではありません
    • good
    • 0
この回答へのお礼

早急なご回答ありがとうございます。
Win32コンソールアプリケーションでの作成だと、
上手くいったのですが、MFCでは無理があるようですね。。
とりあえずはコピーを使用する方法で上手く動作したので、
DLL構築の方法については、余裕があれば独自で調べてみることにします。
ありがとうございました!

お礼日時:2009/03/23 16:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!