独自のクラスの作成と使用方法について

[戻る]
DIQ 2003/10/02(木) 18:02:37
はじめまして
すごい初心者なんで、質問内容も初心的なものですいません
現在、あるプロジェクトの開発前なんですが、先に、共通に使えるクラスを作成すると言う依頼
が発生し、実は、ほとんど、"++"部分は弄っていなかったんで、"共通に使用できるクラス"と
いうのがわかりません。
そこで、A構造体とB関数の持ったクラスを作りたいのですが、
とりあえず、ネットで調べながら、「ClassView」に新規クラスを作成することができました。
「"Public"に書くらしい」と言うこともわかりました。
コントラスタ
デストラクタもなんとなくわかりました。
パブリック内にA構造体とB関数を書いて、そのプロジェクト内で一応使えるのですが、それを、
他のプロジェクトで使用する方法と、外に出す(?)方法がわかりません。

どうか御教授願います

JUN2 2003/10/02(木) 18:55:10
>他のプロジェクトで使用する方法
 普通に、作ったソースとヘッダーを他のプロジェクトに追加して
 ビルドすればいいのでは。

 質問の意味からの回答はこれが限界。
 DLL化?

>外に出す(?)方法がわかりません。
 グローバル化?(++知らなくても分かるから違うかな)

PAI 2003/10/02(木) 19:49:48
Lib の作成のこと?

・・・C++じゃなくてもできるな。これも違うか。

wood 2003/10/03(金) 06:48:25
質問です

「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用処理
]

DIQ 2003/10/03(金) 08:45:12
御返答ありがとうございます
よくわからないのですが、クラスを作成し、そのヘッダーファイルを他のプログラムで使
い、"#include"で指定すると使えるようになりますか?

昨日ネットで調べた感じでは、DLLを作るみたいなことがかいてあったんですが…(あと、
#include "stdafx.h"を参照に行ってしまう…とか)DLLは作らなくても平気ですか?

επιστημη [HomePage] 2003/10/03(金) 09:28:47
ライブラリの作り方について学習してください。

> よくわからないのですが、クラスを作成し、そのヘッダーファイルを
> 他のプログラムで使い、"#include"で指定すると使えるようになりますか?

コンパイルまでは通るでしょうが、ライブラリをリンクしないとリンク・エラー
になります。

> 昨日ネットで調べた感じでは、DLLを作るみたいなことがかいてあったんですが…
> DLLは作らなくても平気ですか?

DLLもライブラリの一種です。

> (あと、#include "stdafx.h"を参照に行ってしまう…とか)

#include "stdafx.h" がライブラリ・ヘッダにあるからです。

επιστημη [HomePage] 2003/10/03(金) 10:11:06
> #include "stdafx.h" がライブラリ・ヘッダにあるからです。

失礼。正しくは:
#include "stdafx.h" がライブラリ・コードのどこかにあるからです。

DIQ 2003/10/03(金) 12:24:01
[[解決]]
ありがとうございました。
なんとかできました。
(人のHP参照)スタティックライブラリを作成して、それを別のプロジェクトで、ヘッダー、ラ
イブラリを参照して、XXX.関数(1)とかって記述で使えることもわかりました。

古いスレッドには追加発言できません。