''[[FrontPage]]''

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

[[C++/Tk/Tcl拡張/Visual StudioでDLLを作成:http://bj006.com/bjwiki/?C%2B%2B%2FTk%2FTcl%B3%C8%C4%A5%2FVisual%20Studio%A4%C7DLL%A4%F2%BA%EE%C0%AE]]でもおまけで書いてしまいましたが、整理のためにページを作っておきます。~
プロジェクトの規模が大きくなるにつれ、コンパイルにかかる時間を短縮することが重要になります。~
~
多くのファイルをインクルードする、滅多に変更が入らない、というような共通ヘッダファイルを対象とします。

** 制約事項 [#va5611bf]
visual studioで開発することを前提とする。~
~
~
#ref(http://bj006.com/images/c++_tcl_dll_090502_05.png)
#ref(http://bj006.com/images/c++_tcl_dll_090502_06.png)
#ref(http://bj006.com/images/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                                        //

*** 修正履歴 [#a6333136]
~

*** 課題 [#x60ff481]
いまいち理解しきれてないけど、速くなったからいいや。~
~
~

-備考~
~

*** 参考ページ [#b7c15f99]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS