64bit版hmjre.dll についてNo.02359
h-tom さん 09/11/22 20:00
 

h-tom です。

64bit版hmjre.dllで、質問があります。

自前のDLLで、64bitへの対応を行っているのですが、hjmre.dll関連で、
躓いています。
正規表現を使うので、hmjre.dllをロードしているのですが、"Jre2Open"が、
失敗します。
hmjre.dllのVer.1.12のソースを参考に、いろいろ調べてみたら、JRE2構造体
のサイズが異なっていることがわかりました。
 JRE2構造体のdwSize値   :78 (64bit秀丸エディタが返す値)
 自前のDLLでのsizeof(JRE2) :74
 "Jre2Open"で、構造体のサイズチェックを行っているので、
 そこでfalseになっている?

おそらく、JRE2構造体の「nCompData1」が int -> MEMID へ変更になっている
と思うですが、あってますかね?

        FARPROC lpfnUsrFunc;            // コールバック関数へのFARポインタ.
ここ--> int nCompData1;                 // コンパイルデータ1.
        MEMID hCompData2;               // コンパイルデータ2.ハンドル.
        MEMID hCompData3;               // コンパイルデータ3.ハンドル.
        MEMID hCompData4;               // コンパイルデータ4.ハンドル.

[ ]
RE:02359 64bit版hmjre.dll についてNo.02360
秀まるお さん 09/11/22 22:21
 
 64bit版は秀丸担当が作ったのですが、ソースコードを見た所によると、

typedef void* MEMID;

#pragma pack(1)
// バージョン1.06以降はこの構造体を使用してください.
// ただし,バージョン1.xxでは仕様が流動的です(どないせーちゅうねん).
typedef struct tagJRE2{
    DWORD dwSize;                   // この構造体のサイズ.
    BOOL bConv;                     // この構造体の使用中を示すフラグ.
    UINT nStart;                    // 検索開始位置.バイト数.先頭は0.
    UINT nWarning;                  // ウォーニングコード. (v1.11からUINTに
変更)
    int nError;                     // エラーコード.
    UINT nLength;                   // マッチ長.バイト数.
    UINT nPosition;                 // マッチ位置.先頭は0.(お恥ずかしい)
    WORD wTranslate;                // 変換テーブル番号.
    LPSTR lpszTable;                // 変換テーブル.
    FARPROC lpfnUsrFunc;            // コールバック関数へのFARポインタ(使わ
ないように).
    UINT_PTR nCompData1;                    // コンパイルデータ1.  WIN64対応
で修正。
    MEMID hCompData2;       // コンパイルデータ2.ハンドル.
    MEMID hCompData3;       // コンパイルデータ3.ハンドル.
    MEMID hCompData4;       // コンパイルデータ4.ハンドル.
} JRE2, *PJRE2, NEAR*NPJRE2, FAR*LPJRE2;
#pragma pack()


 のようになっているようです。

> おそらく、JRE2構造体の「nCompData1」が int -> MEMID へ変更になっている
> と思うですが、あってますかね?

 nCompData1がポインター扱い(64bit版だと8バイト)という認識で合っている
ようです。

[ ]
RE:02360 64bit版hmjre.dll についてNo.02361
h-tom さん 09/11/23 00:53
 

h-tom です。

> nCompData1がポインター扱い(64bit版だと8バイト)という認識で合っている
>ようです。
ありがとうございます。簡単なサンプルで、問題なくうごきました。

[ ]