DLLの概要

アプリケーションフォルダーの中にあるフォルダーを登録対象とする。複数のDLLを登録可能とする。DLL内は、指標用クラス確保と開放関数が外部公開される。指標の計算・表示等は用意されているKABU_INDEXクラスをヘッダーファイルとして取り込み、それをDLL側で派生させて使用する。したがってすべて仮想関数となる。クラス確保時にオブジェクトへのポインタが返されるので、そのオブジェクトを元に仮想関数として呼び出す。

KABU_INDEXクラスの仕様

class KABU_INDEX{
public:
	int **lvw;		//	リストビュー列幅
	HMODULE hMod;		//	指標のDLLハンドル
	CHAT_TYPE chat_type;	//	チャート表示で表示する場所(蝋燭,出来高,指標1,指標2)
	int* chat_disp_f;	//	チャート表示をする場合TRUE , 表示しない場合False
	TCHAR* dll_name;
	int ver[4];		//	バージョン
	TCHAR* url;		//	サポートURL
	TCHAR* vendor;		//	ベンダー名
	TCHAR* date;		//	リリース年月日
	COLORREF* color;	//	線の色
	int* fday;		//	チャート先行スパン日数
	int index_num;		//	リストビュー等に表示する指標数
	TCHAR** names;		//	指標名


	virtual int InsertColumn(HWND hList,int subItem,LIST_VIEW_TYPE lvt)=0;
//	株価をインターネットから取得した後に呼び出される。
	virtual int inet_read(HINTERNET h,KABU* kp,int code_max,time_t ts,time_t te)=0;
//	株価をファイルから呼び出した後に呼び出される。
	virtual int file_read(TCHAR* pass,KABU* kp,int code_max)=0;
//	株価をファイルへ保存した後に呼び出される。
	virtual int file_write(TCHAR* pass,KABU* kp,int code_max)=0;
//	指標の値を取得
	virtual TCHAR* get_data(TCHAR* buf,int sz,KABU* kp,int kabu_num,int ext_num,int n)=0;

//	指標計算時が必要な時に呼び出される(最初の1回だけ)
	virtual void calc_init(KABU* kabu,int code_max)=0;
//	指標計算時が必要な時に呼び出される(1銘柄ごとに呼び出される)
	virtual void calc(KABU* kp,int kabu_num)=0;
//	リストビューに指標を表示
	virtual int listview(KABU* k,HWND ,int itemNo,int subItem,int kabu_num,int num)=0;
//	リストビューのカラムをクリックした場合に呼び出される。ソート用の比較関数
	virtual void listview_sort_init(int n)=0; 
//	リストビューのカラムをクリックした場合に呼び出される。ソート用の比較関数
	virtual int listview_cmp(TCHAR* ,TCHAR* ,int )=0;
//	検索条件設定リストビューをクリックした場合に呼び出される、検索条件設定ダイアログ表示関数
	virtual void cond_dialog(HINSTANCE , HWND,int  num,int index)=0;
//	検索条件をリストビューに表示
	virtual void cond_view_set(HWND , int , int , int )=0;
//	検索条件が有効か無効化を返す TRUE:有効 FALSE:無効
	virtual int cond_valid_chk(int,int)=0;
//	検索条件に一致する場合はTRUEを返す
	virtual int cmp(KABU* kp,int num,int kabu_num,int epos,int index)=0;
//	指標の配列を確保する場合に呼び出される。
	virtual bool alloc(int code_max,int len,int cond_num)=0;
//	指標の配列を解放する場合に呼び出される。
	virtual void free(void)=0;
//	チャート表示の最大値と最小値を取得
	virtual void chat_range(KABU* kp,int s,int e,int kabu_num,int* ymin,int* ymax,int index)=0;
//	チャート表示開始時に呼び出される
	virtual int chat_init(CHAT_BASE& chat_base,int kabu_num,int es,int ee)=0;
//	チャート表示時に1日分のデータを表示する。
	virtual void chat_draw(CHAT_BASE& chat_base,int kabu_num,int n,int wx,int num)=0;
//	デストラクタ
	virtual ~KABU_INDEX(){};
};

DLL側で作成する必要がある関数

EXPORT KABU_INDEX** kabu_index_alloc(int* n,TCHAR* path);

指標をサポートするオブジェクトを確保して返す。
引数
	n:指標数を返すint型変数のポインタ
	path:アプリケーションデーターが保存されているフォルダー
戻り値
	確保された*n個のKABU_INDEX型へのポインタ
	*nに確保されたKABU_INDEXの個数が格納する
以下、指標をサポートするクラスのメンバー関数(KABU_INDEXを派生させて作成)

EXPORT void kabu_index_free(TCHAR* path);

kabu_index_allocで確保されたオブジェクトを開放する。
引数
	path:アプリケーションデーターが保存されているフォルダー

EXPORT void kabu_index_opt_read(TCHAR* path,int cond_num);

指標表示で使用する、検索条件やチャート表示の条件をファイルから読み込む。
引数
	path:アプリケーションデーターが保存されているフォルダー
	cond_num:絞り込み条件数(買い1,買い2,...売り5)

EXPORT void kabu_index_opt_write(TCHAR* path,int cond_num);

指標表示で使用する、検索条件やチャート表示の条件をファイルへ保存する。
引数
path:アプリケーションデーターが保存されているフォルダー
cond_num:絞り込み条件数(買い1,買い2,...売り5)

DLL側で作成する必要があるKABU_INDEXを派生したクラスの仮想メンバー関数

int InsertColumn(HWND hList,int subItem,LIST_VIEW_TYPE lvt);

リストビューの列名を設定(全銘柄、時系列等表示時等に呼び出される)
引数
	hList:リストビューのハンドル
	subItem:リストビューの列開始位置
	lvt:リストビューのタイプ
戻り値
	この関数で設定された列終了位置+1

int inet_read(HINTERNET h,KABU* kp,int code_max,time_t ts,time_t te);

株価をインターネットから取得した後に呼び出される。ユーザー側でインターネットから呼び出す必要がある場合に使用
引数
	h:インターネットハンドル
	kp:KABU型への配列
	code_max:銘柄数
	ts:読み込み開始日
	te:読み込み終了日

int file_read(TCHAR* path,KABU* kp,int code_max);

株価をファイルから呼び出した後に呼び出される。
引数
	path:アプリケーションデーターが保存されているフォルダー
	kp:KABU型への配列
	code_max:銘柄数

int file_write(TCHAR* path,KABU* kp,int code_max);

株価をファイルへ保存した後に呼び出される。
引数
	path:アプリケーションデーターが保存されているフォルダー
	kp:KABU型への配列
	code_max:銘柄数

TCHAR* get_data(TCHAR* buf,int sz,KABU* kp,int kabu_num,int ext_num,int n);

指標データを文字列で得る
引数
	buf:文字列のバッファ
	sz:最大文字数
	kp:KABU型への配列
	kabu_num:kpの要素位置
	ext_max:営業日ベースの日付位置
	n:指標番号

void calc_init(KABU* kp,int code_max);

指標計算時が必要な時に呼び出される。最初の1回だけ呼び出される。
引数
	kp:KABU型への配列
	kabu_num:kpの要素位置

void calc(KABU* kp,int kabu_num);

指標計算時が必要な時に呼び出される。銘柄ごとに呼び出される。
引数
	kp:KABU型への配列
	kabu_num:kpの要素位置

int listview(KABU* k,HWND hList,int itemNo,int subItem,int kabu_num,int num);

リストビューに指標を表示
引数
	k:KABU型への配列
	hList:リストビューのハンドル
	itemNo:リストビューの行位置
	subItem:リストビューの列位置
	kabu_num:kの要素位置
	num:営業日ベースの日付位置
戻り値
	この関数で設定された列終了位置+1

void listview_sort_init(int n);

リストビューのカラムをクリックした場合に呼び出される。ソート用の比較関数のためにソート方向を設定する。
引数
	n:指標番号

int listview_cmp(TCHAR* buf1,TCHAR* buf2,int n);

リストビューのカラムをクリックした場合に呼び出される。ソート用の比較関数
引数
	buf1:リストビューのセルの文字列
	buf2:リストビューのセルの文字列
	n:指標番号
戻り値
	比較結果

void cond_dialog(HINSTANCE hInst, HWND hList,int num,int index);

検索条件設定リストビューをクリックした場合に呼び出される、検索条件設定ダイアログ表示関数
引数
	hInst:アプリケーションのインタンス
	hList:リストビューのハンドル
	num:絞り込み条件数(買い1,買い2,...売り5)
	index:指標番号

void cond_view_set(HWND hList, int iSubItem, int num, int index);

検索条件をリストビューに表示
引数
	hList:リストビューのハンドル
	subItem:リストビューの列開始位置
	num:絞り込み条件数(買い1,買い2,...売り5)
	index:指標番号
	

int cond_valid_chk(int num,int n);

検索条件が有効か無効化を返す
引数
	n:指標番号
	num:絞り込み条件数(買い1,買い2,...売り5)
戻り値
	TRUE:有効 FALSE:無効	

int cmp(KABU* kp,int num,int kabu_num,int epos,int index);

検索条件に一致する場合はTRUEを返す
引数
	kp:KABU方へのポインタ
	num:絞り込み条件数(買い1,買い2,...売り5)
	kabu_num:銘柄の位置
	epos:営業日ベースの日付位置
	index:指標番号
戻り値
	TRUE:一致 FALSE:不一致

int chat_init(CHAT_BASE& chat_base,int kabu_num,int es,int ee);

チャート表示開始時に呼び出される。この段階で描画をする場合は、FALSEを返す。
引数
	chat_base:チャート表示に必要な表示範囲等のデータが格納されている
		  chat_base.argにKABU_INDEX_CHAT_ARGの中に指標番号(index)が格納されている
	kabu_num:銘柄の位置
	es:営業日ベースの始点日付位置
	ee:営業日ベースの終点日付位置
戻り値
	TRUE:chat_drawで描画する FALSE:chat_initで描画したのでchat_drawで描画しない

 

void chat_draw(CHAT_BASE& chat_base,int kabu_num,int n,int wx,int index);

チャート表示時に1日分のデータを表示する。y座標はchat_base.get_yで取得する。
引数
	chat_base:チャート表示に必要な表示範囲等のデータが格納されている
		  chat_base.argにKABU_INDEX_CHAT_ARGの中に指標番号(index)が格納されている
	kabu_num:銘柄の位置
	n:営業日ベースの日付位置
	wx:指標を描画するx座標の中心
	index:指標番号

bool alloc(int code_max,int len,int cond_num);

指標の配列を確保する場合に呼び出される。
引数
	code_max:銘柄数
	len:営業日数
	cond_num:絞り込み条件数(買い1,買い2,...売り5)

bool free(void);

指標の配列を解放する場合に呼び出される。

void chat_range(KABU* kp,int s,int e,int kabu_num,int* ymin,int* ymax,int index);

チャート表示の最大値と最小値を取得
引数
	kp:KABU型へのポインタ
	s:営業日ベースの始点日付位置
	e:営業日ベースの終点日付位置
	kabu_num:銘柄の位置
	ymin:最小値を保存するint方へのポインタ
	ymax:最大値を保存するint方へのポインタ

 

~KABU_INDEX();

デストラクタ

検索条件等の保存先

検索条件の保存は、各関数の引数pathで示されるフォルダの中に各自でフォルダーを作成して、その中にファイルを作成して保存してください。