Ну, название вашего вопроса подразумевает, что в нем задействованы ДВА макроса, но в вашем примере показан только один макрос. Поэтому я пойду вперед и угадаю, что у вас есть:
#define InitProperty(Name, Type) DefineMethods ( Name.Mode, Type, Name )
#define DefineMethods(Name, Type, Arg) DefineMethods##Name( Type, Arg )
Теперь, если вы вызовете это с
InitProperty(Lenght, caller)
вы получите (после расширения макроса)
DefineMethodsLenght.Mode(caller, Lenght)
это то, что вы описываете. Вы говорите, что хотите
DefineMethods(Lenght.Mode, caller, Lenght)
, который существует в середине процесса расширения макроса, но после расширения макроса DefineMethods вы получите то, что видите. Если это НЕ то, что вам нужно, проблема в макросе DefineMethods, а не в макросе InitProperty, но, поскольку вы не показываете это в своем вопросе, мы не можем точно сказать, что происходит.