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ライフをお過ごしください。