00001 #pragma once 00002 00008 #include "WinTools.h" 00009 00010 00011 // 00012 namespace jbxwl { 00013 00014 00047 typedef char* (*FUNC_STRING)(int); 00048 00049 00050 // 00051 // DLLデータを格納するためのクラス 00052 // 00053 class DLLModule 00054 { 00055 public: 00056 int status; // モジュールの状態.<=0 では不正な状態. 00057 int fnum; // 使用できる関数の数 00058 00059 char* title; 00060 CString dllname; // DLL名 00061 CString filename; // DLLファイル名 00062 CString funcname; // 情報取得関数の名前.予め決めておく. 00063 00064 HMODULE hmod; // モジュールハンドラ 00065 00066 protected: 00067 FUNC_STRING pgetinfo; // 情報取得関数へのポインタ 00068 void** pfunc; // 使用できる関数へのポインタ配列 00069 00070 public: 00071 DLLModule(LPCTSTR fname, int n) { init(fname, n);} 00072 DLLModule() { init(NULL, 0);} 00073 virtual ~DLLModule() { free();} 00074 00075 void init(LPCTSTR fname, int n); 00076 void free(); 00077 char* get_info(int n=0) { if (pgetinfo==NULL) return NULL; return (*pgetinfo)(n);} 00078 00079 BOOL set_funcname(LPCTSTR fname, int n); 00080 BOOL get_module_info(tList* lp); 00081 void* get_funcptr(int n); 00082 00083 friend class DLLModuleTBL; 00084 }; 00085 00086 00087 00088 // 00089 // DLLModule の配列のクラス 00090 // 00091 class DLLModuleTBL 00092 { 00093 public: 00094 int vnum; // 有効なDLLの数 00095 DLLModule** dllmod; // DLLModuleポインタ配列へのポインタ 00096 00097 bool loaded; 00098 00099 protected: 00100 int tnum; // 読み込んだDLLの数(不正DLLを含む) 00101 tList* lp; // ディレクトリから読み取った DLL情報 00102 CString dirname; // DLLを探すディレクトリ名 00103 00104 public: 00105 DLLModuleTBL(LPCTSTR dirn) { init(dirn);} 00106 DLLModuleTBL() { init(NULL);} 00107 virtual ~DLLModuleTBL() { free();} 00108 00109 void init(LPCTSTR dirn=NULL); 00110 void free(); 00111 00112 BOOL load_module(LPCTSTR dirn=NULL); 00113 void make_module_tbl(LPCTSTR fname, int n); 00114 00115 protected: 00116 tList* get_dir_module(LPCTSTR dirn); 00117 00118 virtual DLLModule* new_module(LPCTSTR fname, int n) { return new DLLModule(fname, n);} 00119 virtual void set_module_function() {} 00120 }; 00121 00122 00123 } // namespace