|
山田和夫さんのサイトがアクセス不能になってるのですね。
とりあえず、JREUSR.HってヘッダファイルとJreFuzzy.hをアップロードしました。
https://hide.maruo.co.jp/software/bin3/hmjreheader507.zip
使い方ですが・・・簡単な例だと以下のようになります。こんな感じでだいたい見
当付けて呼び出してみて欲しいです。不明な点は、とりあえず会議室で質問していた
だければお返事できると思います。
char* FindRegular( char* pszTarget, int cchTarget, char* pszFind ) {
LoadJre();
if( fJreLoadError ) {
return NULL;
}
JRE2 jredata;
jredata.dwSize = sizeof(jredata);
if( !pfnJreOpen( &jredata ) ) {
return NULL;
}
if( !pfnJreCompile( &jredata, pszFind ) ) {
return NULL;
}
jredata.nStart = 0;
BOOL fHit = pfnJreGetMatchInfo_V318( &jredata, pszTarget, cchTarget,
FALSE, NULL );
pfnJreClose( &jredata );
if( !fHit ) {
return NULL;
}
return pszTarget + jredata.nPosition;
}
HANDLE hmodJre;
BOOL (FAR PASCAL *pfnJreOpen)( void* lpjreJre );
BOOL (FAR PASCAL *pfnJreCompile)( void* lpjreJre, LPSTR lpszRe );
BOOL (FAR PASCAL *pfnJreGetMatchInfo)( void* lpjreJre, LPSTR lpszStr );
//HmJre.dll V3.18
//BOOL (FAR PASCAL *pfnJreGetMatchInfo_HmJre)( void* lpjreJre, LPSTR lpszStr,
int cchStr ); //V4.54
BOOL (FAR PASCAL *pfnJreGetMatchInfo_V318)( void* lpjreJre, LPSTR lpszStr, i
nt cchStr, BOOL fWordFuzzyMatch, void* pFuzzyData ); //V4.54
BOOL (FAR PASCAL *pfnJreClose)( void* lpjreJre );
static WORD (FAR PASCAL *pfnJreGetVersion)( void );
static int (FAR PASCAL *pfnGetJreMessage)( int nMessageType, int nLanguage,
LPSTR lpszBuff, int cbBuff );
static UINT (FAR PASCAL *pfnDecodeEscSeq)( LPSTR lpszRe, LPSTR lpszBuff, UIN
T uiSize );
BOOL (FAR PASCAL *pfnJreSetCodePage)( void* lpjre, UINT cp );
static BOOL fJreLoadError;
static char szJrePath[MAX_PATH];
static int xJrePathBaseName = 0;
static BOOL (FAR PASCAL *pfnFuzzy_Open)( JREFUZZYDATA* pData, UINT cp );
static BOOL (FAR PASCAL *pfnFuzzy_Close)( JREFUZZYDATA* pData );
static BOOL (FAR PASCAL *pfnFuzzy_ConvertTarget)( JREFUZZYDATA* pData, const
char* pszSrc );
static BOOL (FAR PASCAL *pfnFuzzy_ConvertFindString)( JREFUZZYDATA* pData, c
onst char* pszSrc, BOOL fRegular );
static int (FAR PASCAL *pfnFuzzy_FindArea2RealArea)( JREFUZZYDATA* pData, in
t x, int* pcchMatch ); //V4.00β5
static int (FAR PASCAL *pfnFuzzy_RealPos2FindPos)( JREFUZZYDATA* pData, int
x );
static BOOL (FAR _cdecl *pfnFuzzy_OptionDialog)( HWND hwndParent, BOOL fEnab
leNoReturn );
static JREFUZZYDATA* (WINAPI *pfnFuzzy_GetFuzzyDataInJre)( void* pJre );
LoadJre関数・・・こんな感じの処理
hmodJre = LoadLibrary( szJrePath ); // LoadとFreeは対になっていない
ので注意
if( hmodJre == NULL ) {
#ifdef _DEBUG
int nError = GetLastError();
#endif
fJreLoadError = 1 /*IDS_JRE_DLL_CANNOT_LOAD*/;
return FALSE;
}
static struct FARPROCANDLABEL aProcLabel[] = {
{ (FARPROC*)&pfnJreOpen, "Jre2Open" },
{ (FARPROC*)&pfnJreCompile, "Jre2Compile" },
{ (FARPROC*)&pfnJreGetMatchInfo, "Jre2GetMatchInfo" },
// { (FARPROC*)&pfnJreGetMatchInfo_HmJre, "Jre2GetMatchInfo_HmJre" },
{ (FARPROC*)&pfnJreGetMatchInfo_V318, "Jre2GetMatchInfo_V318" },
{ (FARPROC*)&pfnJreClose, "Jre2Close" },
{ (FARPROC*)&pfnJreGetVersion, "JreGetVersion" },
{ (FARPROC*)&pfnGetJreMessage, "GetJreMessage" },
{ (FARPROC*)&pfnDecodeEscSeq, "DecodeEscSeq" },
{ (FARPROC*)&pfnJreSetCodePage, "Jre2SetCodePage" },
{ (FARPROC*)&pfnFuzzy_Open, "Fuzzy_Open" },
{ (FARPROC*)&pfnFuzzy_Close, "Fuzzy_Close" },
{ (FARPROC*)&pfnFuzzy_ConvertTarget, "Fuzzy_ConvertTarget" },
{ (FARPROC*)&pfnFuzzy_ConvertFindString, "Fuzzy_ConvertFindStrin
g" },
{ (FARPROC*)&pfnFuzzy_FindArea2RealArea, "Fuzzy_FindArea2RealAre
a" }, //V4.00β5
{ (FARPROC*)&pfnFuzzy_RealPos2FindPos, "Fuzzy_RealPos2FindPos" },
//V4.00β5
{ (FARPROC*)&pfnFuzzy_OptionDialog, "Fuzzy_OptionDialog" },
{ (FARPROC*)&pfnFuzzy_GetFuzzyDataInJre, "Fuzzy_GetFuzzyDataInJr
e" },
{ NULL, NULL },
};
GetProcAddressMulti( (HINSTANCE)hmodJre, aProcLabel );
if( pfnJreGetMatchInfo_V318 == NULL ) {
pfnJreGetMatchInfo_V318 = JreGetMatchInfo_V318_Local;
pfnJreSetCodePage = NULL; //V6.15final 鬼車の場合になぜか
これを呼ぶと後でGetMatchInfoの時に落ちてしまう。
}
if( pfnJreSetCodePage == NULL ) {
pfnJreSetCodePage = JreSetCodePage_Dummy;
}
|
|