#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] \
}
위의 코드는 작동하지 않습니다 중 하나 : 나는 그것을 시도 마지막으로, 당신은 인라인 어셈블리 블록의 내부 레이블을 만들 수 없습니다 적어도
error C2447: '{' : missing function header (old-style formal list?) error C2014: preprocessor command must start as first nonwhite space
전처리 기의 결과를 볼 때 탁월한 점이 있습니까? – torak
글쎄, 결과에 줄 바꿈이없는 것 같습니다. – shadeMe