Jre2Openが失敗するNo.17577
sanrai さん 04/07/18 22:24
 
HmJre.dllで正規表現を行うソフトを作りたいのですが、初期化の時点でつまづいて
います。Visual C++.NETのプロジェクトで"jreusr.h"をインクルードして、DLLをプ
ロジェクトと同じフォルダに入れ、JRE.dllのヘルプを元に以下のコードを書いてみ
ました。

LPJRE2OPEN lpJre2Open;
JRE2 jreData;
HINSTANCE hDll;
 
if (NULL == (hDll = LoadLibrary("HmJre.dll")))
{
 return FALSE;
}

if (NULL == (lpJre2Open = (LPJRE2OPEN)GetProcAddress(hDll, (LPCSTR)"Jre2Open
")))
{
 FreeLibrary(hDll);
 return FALSE;
}

if ( (*lpJre2Open)((LPJRE2)&jreData) )
{
 return TRUE;
}
else
{
 int x = jreData.nError;
 return FALSE; //ここに行ってしまう
}

FreeLibrary(hDll);

困ったことに、LoadLibraryとGetProcAddressは成功しますが、Jre2Open実行でFLASE
が返ってしまいます。 jreData.nErrorの値は-858993460です。メモリも十分ありま
すし、エラーを起こす要因はまったく考えられないのですが・・・。

もしかするとプロジェクトの設定が間違っているのかもしれませんし、上記コードに
ミスがあるのかもしれません。何が原因なのか、解決法は存在するのかお教えくださ
い。

[ ]
RE:17577 Jre2Openが失敗するNo.17578
杉浦 まさき さん 04/07/18 23:20
 
sanrai さん、はじめまして。
杉浦 まさきと申します。

>もしかするとプロジェクトの設定が間違っているのかもしれませんし、上記コード
>にミスがあるのかもしれません。何が原因なのか、解決法は存在するのかお教えく
>ださい。

API に渡す前に、JRE2 構造体の dwSize メンバに適切な値
(== sizeof(JRE2))を代入する必要があります。サンプル
コードの場合だと、Jre2Open() 呼び出しの前に

jreData.dwSize = sizeof(JRE2);

という1行を追加する必要があります。


[ ]
RE:17577 Jre2Openが失敗するNo.17579
encodingshiftjis さん 04/07/18 23:27
 
>何が原因なのか、解決法は存在するのかお教えください。
目に入ったサンプルをそのままだから
周辺を読むと  // JRE構造体の初期化
が必要らしいとわかります。
http://www.yamada-labs.com/software/spec/jre/
をさらってみましょう

JreFuzzy.h でもなく
.NET の正規表現クラスでもない、理由はわかりませんが

[ ]
RE:17577 【解決】Jre2Openが失敗するNo.17580
sanrai さん 04/07/19 00:20
 
杉浦さま、encodingshiftjisさん、有難うございます。
jreData.dwSize = sizeof(JRE2);を加えて成功しました。
これで安心してDLLを使えます。

[ ]