// SampleAPP プロジェクトのインクルードファイル

#include "..\..\..\INtime_bCapListener\Src\INtime_bCapListener.h"

// すべてのスレッドで利用可能な関数

BOOL				Catalog(RTHANDLE hProcess, RTHANDLE hObject, LPSTR lpszName);
void				Fail(LPSTR lpszMessage, ...);
DWORD				UsecsToKticks(DWORD dwUsecs);
HRESULT				InitCallback(void);
void				PrintReceivePacket(VARIANT *vntRecv, int nRecvNum);
void				ExitApp(void);

// グローバル変数
extern RTHANDLE		hRootProcess;
extern DWORD		dwKtickInUsecs;

#if 1	// ライブラリ動的ロード
// 関数タイプ宣言
typedef HRESULT (*SETCALLBACK)(DWORD dwId, CALLBACK func, void *obj);
typedef void (*SETPROCESSNAME)(LPSTR name);
typedef void (*SETMAILBOXNAME)(LPSTR name);
typedef int (*GETSTATUS)(void);
typedef HRESULT (*INITIALIZE)(BOOL bForceCatalog);
typedef HRESULT (*START)(void);
typedef HRESULT (*STOP)(void);
typedef BSTR (*SYSALLOCSTRING)(const wchar_t *sz);
typedef void (*SYSFREESTRING)(BSTR bstr);
typedef HRESULT (*SAFEARRAYGETLBOUND)(SAFEARRAY *psa, uint16_t nDim, int32_t *plLbound);
typedef HRESULT (*SAFEARRAYGETUBOUND)(SAFEARRAY *psa, uint16_t nDim, int32_t *plUbound);
typedef HRESULT (*SAFEARRAYACCESSDATA)(SAFEARRAY *psa, void **ppvData);
typedef HRESULT (*SAFEARRAYUNACCESSDATA)(SAFEARRAY *psa);
typedef void (*PRINTLOG)(DWORD dwLevel, LPCSTR pFormat, ...);
typedef void (*SETLOGLEVEL)(DWORD dwLevel);
typedef DWORD (*GETLOGLEVEL)(void);
typedef void (*PRINTTIME)(BOOL bClock, BOOL bUTC);


// 関数ポインタ
SETCALLBACK				SetCallback;
SETPROCESSNAME			SetProcessName;
SETMAILBOXNAME			SetMailboxName;
GETSTATUS				GetStatus;
INITIALIZE				Initialize;
START					Start;
STOP					Stop;
SYSALLOCSTRING			SysAllocStr;
SYSFREESTRING			SysFreeStr;
SAFEARRAYGETLBOUND		SArrayGetLBound;
SAFEARRAYGETUBOUND		SArrayGetUBound;
SAFEARRAYACCESSDATA		SArrayAccessData;
SAFEARRAYUNACCESSDATA	SArrayUnaccessData;
PRINTLOG				PLog;
SETLOGLEVEL				SetLogLv;
GETLOGLEVEL				GetLogLv;
PRINTTIME				PTime;
#endif	// ライブラリ動的ロード
