''[[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]