FrontPage

visual studioでプリコンパイル済みヘッダを作成・使用する

C++/Tk/Tcl拡張/Visual StudioでDLLを作成でもおまけで書いてしまいましたが、整理のためにページを作っておきます。
プロジェクトの規模が大きくなるにつれ、コンパイルにかかる時間を短縮することが重要になります。

多くのファイルをインクルードする、滅多に変更が入らない、というような共通ヘッダファイルを対象とします。

制約事項

visual studioで開発することを前提とする。


c++_tcl_dll_090502_05.png
c++_tcl_dll_090502_06.png
c++_tcl_dll_090502_07.png

ファイル名:StyleDll?.h

#ifndef         STYLE_DLL                                       //                                                //
#define         STYLE_DLL                                       //                                                //
                                                                //                                                //
#define         USE_TCL_STUBS   1                               //  スタブ機構を使用する                          //
                                                                //                                                //
extern "C"                                                      //  C言語としての実装を宣言(必要?)               //
{                                                               //                                                //
    __declspec( dllexport ) s4 Dlltest_Init( Tcl_Interp* interp ); //  DLL内の関数を外部に公開する                //
}                                                               //                                                //
                                                                //                                                //
#endif                                                          //  STYLE_DLL                                     //

ファイル名:StyleDll?.cpp

#include "X:\XXXXX\XXXXXX\XXXXXXXX\pch.h"                       //  プリコンパイル済ヘッダ                        //
#include "./StyleDll.h"                                         //  個別ヘッダファイル                            //
                                                                //                                                //
/* DLL Test ***************************************************//*  Dllテスト関数                                 */
static s4 dllTest( ClientData clientData,                       //                                                //
                   Tcl_Interp *interp,                          //                                                //
                   s4 objc,                                     //                                                //
                   Tcl_Obj * CONST objv[] )                     //                                                //
{                                                               //                                                //
    s4 rntCod = TCL_OK;                                         //  リターンコード                                //
                                                                //                                                //
    Tcl_AppendResult( interp,                                   //  Tclインタープリタに文字列を返す               //
                      objv[ZERO]->bytes,                        //  コマンド名                                    //
                      " is called. arg1 is ",                   //  編集                                          //
                      objv[ONE]->bytes, NULL );                 //  渡された引数の1番目                          //
                                                                //                                                //
    return( rntCod );                                           //  正常終了                                      //
}                                                               //                                                //
//*DLL Test ***************************************************//*  Dllテスト関数                                 */
/* Initialize DLL Test ****************************************//*  Dllテスト関数初期化                           */
s4 Dlltest_Init( Tcl_Interp *interp )                           //                                                //
{                                                               //                                                //
    s4 rntCod = TCL_OK;                                         //  リターンコード                                //
                                                                //                                                //
    for( ; ; )                                                  //  無限ループ                                    //
    {                                                           //                                                //
        if( NULL == Tcl_InitStubs( interp, "8.1", ZERO ) )      //  スタブ機構を準備                              //
        {                                                       //  スタブ機構の準備に失敗したら                  //
            rntCod = TCL_ERROR;                                 //  リターンコードに異常を設定                    //
            break;                                              //  処理中断                                      //
        }                                                       //                                                //
                                                                //                                                //
        Tcl_CreateObjCommand( interp, "Dlltest", dllTest, NULL, NULL ); //  Tcl拡張コマンドを登録                 //
    }                                                           //                                                //
                                                                //                                                //
    return( rntCod );                                           //  リターンコードを戻して処理終了                //
}                                                               //                                                //
//*Initialize DLL Test ****************************************//*  Dllテスト関数初期化                           */

ファイル名:pch.cpp

#include "X:\XXXXX\XXXXXX\XXXXXXXX\pch.h"                       //  プリコンパイル済みヘッダを指定                //
                                                                //                                                //

ファイル名:pch.h

#include        "./comm.h"                                      //  共通ヘッダをプリコンパイル                    //

ファイル名:comm.h

#ifndef         COMM_H                                          //                                                //
#define         COMM_H                                          //                                                //
                                                                //                                                //
//#pragma comment( lib, "wsock32.lib" )                           //  for socket                                    //
#pragma comment( lib, "tcl85.lib" )                             //  for C++/TK                                    //
#pragma comment( lib, "tk85.lib" )                              //  for C++/TK                                    //
                                                                //                                                //
#include        <tchar.h>                                       //  for TCHAR etc.                                //
#include        <tcl.h>                                         //  for TCL                                       //
//#include        <winsock.h>                                     //                                                //
#include        <winsock2.h>                                    //  for winsock                                   //
#include        <windows.h>                                     //  for win32API                                  //
//#include        <commdlg.h>                                     //  for コモンダイアログ                          //
#include        <stdio.h>                                       //  標準入出力                                    //
#include        <fstream>                                       //  ファイルストリーム                            //
#include        <iostream>                                      //  入出力ストリーム                              //
#include        <string>                                        //  for string                                    //
//#include        <vector>                                        //  for vector                                    //
//#include        <sstream>                                       //  for ostringstream                             //
#include        <wchar.h>                                       //  for ワイド文字列                              //
#include        <stdlib.h>                                      //  標準ライブラリ                                //
//#include        <boost/regex.hpp>                               //  for regex++                                   //
//#include        <stdarg.h>                                      //  for vararg                                    //
                                                                //                                                //
//#using <mscorlib.dll>                                           //                                                //
                                                                //                                                //
using namespace std;                                            //  名前空間                                      //
//using namespace boost;                                          //  名前空間                                      //
                                                                //                                                //
//extern HINSTANCE vc_hInst;                                      //  外部変数の宣言                                //
//extern HWND      vc_hWnd;                                       //  外部変数の宣言                                //
                                                                //                                                //
                                                                //  判定用定数定義                                //
#define         PROC_NG             (-1)                        //  プロセスNG                                    //
#define         FUNC_NG_NEGATIVE    (-1)                        //  関数NG(-1)                                    //
#define         FUNC_NG             0                           //  関数NG                                        //
#define         END_MSG             0                           //  終了メッセージ                                //
#define         PROCESS_OK          0                           //  処理OK                                        //
#define         RET_OK              0                           //  リターンOK                                    //
#define         RET_NG              (-1)                        //  リターンNG                                    //
#define         WND_HEIGHT          350                         //  ウィンドウ高                                  //
#define         WND_WIDTH           570                         //  ウィンドウ幅                                  //
#define         IND_TRUE            1                           //  チェック真                                    //
#define         IND_FALSE           0                           //  チェック偽                                    //
#define         ZERO                0                           //  そのまま                                      //
#define         ONE                 1                           //  そのまま                                      //
#define         MINUS_ONE           (-1)                        //  そのまま                                      //
#define         FFFF                65535                       //  そのまま                                      //
#define         FF                  255                         //  そのまま                                      //
#define         IND_DUM             (-8)                        //  偽情報の合言葉                                //
                                                                //                                                //
                                                                //  共通定数定義                                  //
#define         MAX_F_NAME          260                         //  ファイル名最大文字数                          //
                                                                //                                                //
                                                                //  Window定数定義                                //
//#define         SCRN_POS_X          50                          //  スクリーンポジションX                         //
//#define         SCRN_POS_Y          50                          //  スクリーンポジションY                         //
                                                                //                                                //
typedef         bool                b0;                         //  変数型別名定義                                //
typedef         unsigned char       u1;                         //  変数型別名定義                                //
typedef         signed char         s1;                         //  変数型別名定義                                //
typedef         unsigned int        u4;                         //  変数型別名定義                                //
typedef         signed int          s4;                         //  変数型別名定義                                //
typedef         long                f4;                         //  変数型別名定義                                //
typedef         double              f8;                         //  変数型別名定義                                //
typedef         unsigned short      u2;                         //  変数型別名定義                                //
typedef         signed short        s2;                         //  変数型別名定義                                //
typedef int Tcl_PackageInitProc( Tcl_Interp *interp );          //  tclインタープリタ                             //
                                                                //                                                //
const f8        ROUND_OFF_RATE =    (0.5);                      //  実数型の整数化に使う値                        //
                                                                //                                                //
//#include        "./StyleDll.h"                                  //  StyleDllヘッダファイル                        //
                                                                //                                                //
//using namespace dNet;                                           //                                                //
                                                                //                                                //
                                                                //                                                //
#endif                                                          //  COMM_H                                        //

修正履歴


課題

いまいち理解しきれてないけど、速くなったからいいや。


  • 備考

参考ページ


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-02-08 (月) 02:08:11 (5184d)