W64API不具合レポート〜ExtMgr編
果たして、Lotus Notes C API ToolkitのHCL版はリリースされるのか?
今回のWindows 64ビット版コンパイル時の不具合については簡潔に報告します。
Extension Manager(通称ExtMgr)において、コールバック関数にはEMRecordという構造体へのポインタが渡されます。
typedef struct { EID EId; /* identifier */ WORD NotificationType; /* EM_BEFORE or EM_AFTER */ STATUS Status; /* core error code */ VARARG_PTR Ap; /* ptr to args */ } EMRECORD;
このときの EID
型は、定義によると以下のようになります。
typedef WORD EID;
しかし、Windows 64では不十分で、このまま使うと以下のメンバ変数が2バイトずつズレてしまい、最後の Ap
が指すポインタを操作すると、Dominoサーバがクラッシュします。
そのため、 EID
の定義を以下のように修正する必要があります。
// extmgr.h #if defined(NT) && defined(_AMD64_) typedef DWORD EID; #else typedef WORD EID; #endif
それでは、素敵なNotes C APIライフをお過ごしください。