【发布时间】:2010-06-29 03:10:19
【问题描述】:
#define CANCEL_COMMON_DIALOG_HOOK(name) \
void __declspec(naked) ##name##CancelCommonDialogHook(void) \
{ \
__asm \
{ \
add esp, [k##name##CancelCommonDialogStackOffset] \
jz RESTORE \
jmp [k##name##CancelCommonDialogNewFileRetnAddr] \
RESTORE: \
pushad \
call DoSavePluginCommonDialogHook \
test eax, eax \
jnz REMOVE \
popad \
jmp [k##name##CancelCommonDialogRestoreRetnAddr] \
REMOVE: \
popad \
jmp [k##name##CancelCommonDialogRemoveRetnAddr] \
} \
}
使用上面的宏会导致编译器抛出这个错误:
错误 C2400:内联汇编语法 “第二个操作数”中的错误;成立 '恢复'
我做错了什么?
编辑:
void __declspec(naked) #name##CancelCommonDialogHook(void) \
{ \
__asm add esp, [k##name##CancelCommonDialogStackOffset] \
__asm jz RESTORE \
__asm jmp [k##name##CancelCommonDialogNewFileRetnAddr] \
RESTORE: \
__asm pushad \
__asm call DoSavePluginCommonDialogHook \
__asm test eax, eax \
__asm jnz REMOVE \
__asm popad \
__asm jmp [k##name##CancelCommonDialogRestoreRetnAddr] \
REMOVE: \
__asm popad \
__asm jmp [k##name##CancelCommonDialogRemoveRetnAddr] \
}
上面的代码也不行:
错误 C2447:“{”:缺少函数 标题(旧式正式列表?)错误 C2014: 预处理器命令必须启动 作为第一个非空白空间
【问题讨论】:
-
看看预处理器的结果有什么突出的吗?
-
嗯,结果中似乎没有任何换行符。
标签: c++ visual-studio assembly c-preprocessor