はじめまして
すごい初心者なんで、質問内容も初心的なものですいません
現在、あるプロジェクトの開発前なんですが、先に、共通に使えるクラスを作成すると言う依頼
が発生し、実は、ほとんど、++部分は弄っていなかったんで、共通に使用できるクラスと
いうのがわかりません。
そこで、A構造体とB関数の持ったクラスを作りたいのですが、
とりあえず、ネットで調べながら、「ClassView」に新規クラスを作成することができました。
「Publicに書くらしい」と言うこともわかりました。
コントラスタ
デストラクタもなんとなくわかりました。
パブリック内にA構造体とB関数を書いて、そのプロジェクト内で一応使えるのですが、それを、
他のプロジェクトで使用する方法と、外に出す(?)方法がわかりません。
どうか御教授願います
>他のプロジェクトで使用する方法
普通に、作ったソースとヘッダーを他のプロジェクトに追加して
ビルドすればいいのでは。
質問の意味からの回答はこれが限界。
DLL化?
>外に出す(?)方法がわかりません。
グローバル化?(++知らなくても分かるから違うかな)
Lib の作成のこと?
・・・C++じゃなくてもできるな。これも違うか。
質問です
「JUN2 さん」のお話を元に以下の例題ソース書いてみました
完全なものではありませんが (結構変なとこといっぱいあるかも? ^^;)
ですが
A.EXEとB.EXEで共通して Class XXXが使用されていること
は分かっていただけますでしょうか
あなたのソースファイル構成は どのように成ってますか?
「ヘッダ 用 ソースファイル」
をファイルビューの外部依存ファイルとして指定し
A.EXEとB.EXEのそれぞれのプロジェクト
へ追加して
共通用 DLLをビルドしたときできた 「LIB」
をA.EXEとB.EXEのそれぞれのプロジェクトの
リンクライブラリに追加してあげれば
やりたいことは出来ると思いますが?
------------------------------------------------------------------
ヘッダ 用 ソースファイル(ファイル名: XXX.h )
#include <DDDDD>
#include <EEEEE>
#include <FFFFF>
class AFX_EXT_CLASS XXX
{
public:
struct A [
]
struct b [
]
XXX();
~XXX();
GetSrta()
]
--------------------------------------------------------------------
ソースファイル 3 これは共通用 DLL
#include xxx.h <-ここが格ソース共通で記述される
extern C int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
// lpReserved を使う場合はここを削除してください
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0(SSMCORE.DLL Initializing!\n);
// 拡張 DLL を1回だけ初期化します。
if (!AfxInitExtensionModule(SSMCOREDLL, hInstance))
return 0;
new CDynLinkLibrary(SSMCOREDLL);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0(SSMCORE.DLL Terminating!\n);
// デストラクタが呼び出される前にライブラリを終了します
AfxTermExtensionModule(SSMCOREDLL);
}
return 1; // ok
}
ここから下に共通関数書く
XXX::XXX()
[
]
XXX::~XXX()
{
}
XXX::GetSrta()
[
たとえば構造体 A を元に何か処理する
]
-------------------------------------------------------------------
-------------------------------------------------------------------
ソースファイル 1 これは実行用 A.EXE 用
#include xxx.h <-ここが格ソース共通で記述される
void main(void)
[
class XXX;
XXX.GetSrta();
A.EXE用処理
]
-------------------------------------------------------------------
ソースファイル 2 これは実行用 B.EXE 用
#include xxx.h <-ここが格ソース共通で記述される
void main(void)
[
class XXX;
XXX.GetSrta();
B.EXE用処理
]
御返答ありがとうございます
よくわからないのですが、クラスを作成し、そのヘッダーファイルを他のプログラムで使
い、#includeで指定すると使えるようになりますか?
昨日ネットで調べた感じでは、DLLを作るみたいなことがかいてあったんですが…(あと、
#include stdafx.hを参照に行ってしまう…とか)DLLは作らなくても平気ですか?
ライブラリの作り方について学習してください。
> よくわからないのですが、クラスを作成し、そのヘッダーファイルを
> 他のプログラムで使い、#includeで指定すると使えるようになりますか?
コンパイルまでは通るでしょうが、ライブラリをリンクしないとリンク・エラー
になります。
> 昨日ネットで調べた感じでは、DLLを作るみたいなことがかいてあったんですが…
> DLLは作らなくても平気ですか?
DLLもライブラリの一種です。
> (あと、#include stdafx.hを参照に行ってしまう…とか)
#include stdafx.h がライブラリ・ヘッダにあるからです。
> #include stdafx.h がライブラリ・ヘッダにあるからです。
失礼。正しくは:
#include stdafx.h がライブラリ・コードのどこかにあるからです。
ありがとうございました。
なんとかできました。
(人のHP参照)スタティックライブラリを作成して、それを別のプロジェクトで、ヘッダー、ラ
イブラリを参照して、XXX.関数(1)とかって記述で使えることもわかりました。