私有ライブラリを作成する



Text Object Class を例にして「私有ライブラリ」の作成方法を説明します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

ライブラリの作成

  1. Win32 アプリケーションから [スタティックライブラリ] をチェックしてプロジェクト(MyLib)を作成します。

  2. MyLib のフォルダーに次の二個のファイルをコピーしてきて下さい。
    [プロジェクト] [既存項目の追加] で、二個のファイルをプロジェクトに追加して下さい。
    二個のファイルは Text Object Class を作成する とほとんど同じですが、 改めてこのページに掲載しています。
    Txtout.h Object Class のヘッダファイル
    Txtout.cpp Object Class のソースファイル
  3. stdafx.h を編集して次のヘッダファイルを取り込んで下さい。
    #include "Txtout.h"
  4. [ソリューションの構成] で [Release] を選択します。
    Debag でもいいのですが、ライブラリのサイズが大きくなります。

  5. [ビルド] [MyLib のビルド(U)] を実行します。
    私有ライブラリ MyLib.lib が Debug または Rerease フォルダーの中に作成されます。

アプリケーションの作成

  1. [ファイル] [新規作成] [プロジェクト] から新規プロジェクト(App)を作成します。
  2. ライブラリを作成したフォルダーから次のファイルをコピーしてきます。
    Txtout.h Object Class のヘッダファイル
    MyLib.lib Object Class のライブラリファイル
  3. [クラスビュー] を選択して、メニューバーから [プロジェクト] [プロパティ] [リンカ] [入力] で 追加する依存関係を表示して [MyLib.lib] を追加します。
    このメニューはダイナミックに設定され、現在操作中の状況によっては「リンカ・入力」が表示されないことがあります。
    そのときはソリューションの選択を切り替えて試して下さい。
    説明の画像
  4. stdafx.h を編集して次のヘッダファイルを取り込んで下さい。
    // TODO: プログラムに必要な追加ヘッダーをここで参照してください。
    #include "Txtout.h"
  5. App.cpp を表示して TXTOUT Object を定義します。
        TXTOUT      TxtOut;                             // TEXT OUT Object の定義
        
  6. WM_PAINT: の修正です。
        case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
            // TODO: 描画コードをここに追加してください...
            TxtOut.Print(hdc,200,50,"Text Out Object");
            EndPaint(hWnd, &ps);
            break;
        
  7. [デバッグ] [デバッグなしで開始] を選択して、ビルド(コンパイル)に続いて実行を行います。
    コンパイルの進行状況とエラーがあれば、エラーメッセージが表示されます。
    "Text Out Object" が表示されたら完成です。

TEXTOUT Object Class の全ソースコード

Txtout.h です。

Object Class で使用するデータや関数のプロトタイプを定義します。
// TXTOUT Class Object Header

class TXTOUT
{ //★非公開部分
  protected:

  //★公開部分
  public:
    void  Print(HDC hdc,int x,int y,LPSTR str);
};

Txtout.cpp です。

Object Class の関数を定義します。
/*********************************************************/
/*★ TXTOUT Object Class の定義   2003-08-15  前田 稔 ★*/
/*********************************************************/
#include "stdafx.h"

void  TXTOUT::Print(HDC hdc,int x,int y,LPSTR str)
{
    TextOut(hdc,x,y,str,strlen(str));
}

ライブラリの作成(VC++ Ver 6.0)

  1. Win32 Static Library でプロジェクト名を Obj にして [新規にワークスペースを作成] を実行すると空のプロジェクトが作成されます。

  2. Obj のフォルダーに次の二個のファイルを格納して下さい。
    [プロジェクト] [プロジェクトへ追加] [ファイル] で、二個のファイルをプロジェクトに追加して下さい。
    Txtout.h Object Class のヘッダファイル
    Txtout.cpp Object Class のソースファイル
  3. [ビルド] [アクティブな構成の設定] で [App-Win32 Release] を選択します。
    Debag でもいいのですが、ライブラリのサイズが大きくなります。
  4. [ビルド] [ビルド(B) Obj.lib] を実行します。
    私有ライブラリ Obj.lib が Debug または Rerease フォルダーの中に作成されます。

【NOTE】

VC 6.0 などで私有ライブラリを組み込んだとき、以下のエラーメッセージが出ることがありますが無視して下さい。
(私の経験では、そのまま実行しても問題は無く、再コンパイルするとエラーメッセージは消えました。)
LINK : warning LNK4098: defaultlib "LIBC" は
他のライブラリの使用と競合しています;
/NODEFAULTLIB:library を使用してください

stdafx.h はプリコンパイルヘッダを使ったときに作成されるヘッダファイルです。
プリコンパイルはマシンの速度が遅かったときの遺物で、現在では大した違いは無いようです。 (^_^;)
stdafx.h を使ったときは、この中でヘッダファイルを取り込んで下さい。

Obj.lib を [プロジェクト] [プロパティ] [リンカ] [入力] から追加する代わりに #pragma を使うことができます。
stdafx.h を編集して次のように記述して下さい。
#pragma once は、同じライブラリを重複して組み込まないようにする指定です。
// TODO: プログラムで必要なヘッダー参照を追加してください。
#include "Txtout.h"
#pragma once
#pragma comment(lib,"Obj.lib")

超初心者のプログラム入門(Win32API C++)