BREW
STRTOWSTR()
などのマクロの定義がアレ
#define STRTOWSTR GET_HELPER()->strtowstr
GET_HELPER()の定義は2種類あって
#define GET_HELPER() g_pvtAEEStdLibEntry
#define GET_HELPER() (*(((AEEHelperFuncs **)AEEMod_Load) - 1))
だった。
VC++(ver6.0)で /P オプションつけて展開させると
g_pvtAEEStdLibEntry->xxxx(arg);
って感じで展開されてた
ので前者の方を追ってみることにした。
g_pvtAEEStdLibEntryの定義は
extern AEEHelperFuncs *g_pvtAEEStdLibEntry;
typedef struct AEEHelperFuncs AEEHelperFuncs; struct AEEHelperFuncs { void *(*memmove)(void *pd, const void *ps, size_t s); void *(*memset)(void *pd, int c, size_t s); // Standard String Functions... char *(*strcpy)(char *dst, const char *src); char *(*strcat)(char *dst, const char *src); ・・・ ・・・
という風に関数だけをまとめてある構造体だった
なんでこんな事をする必要があるのでしょうか?
AEEHelperFuncsを初期化しておいてAppliごとに関数の実装を変えるとか?
そういう多態っぽい事をしたい?
GET_HELPER()の上の定義の方を以下のようにコメントアウトしてみると
//#define GET_HELPER() g_pvtAEEStdLibEntry
下のようにマクロ展開された
GET_HELPER()->wstrcat(pme->m_szText, szBuf);