Вы не можете, по крайней мере, не напрямую.
вызов принимает адрес в качестве параметра. Даже если вы напишите «call functionName», компоновщик заменяет имя функции фактическим адресом функции. Вам нужно сначала сопоставить эту строку с ее адресом. В общем, C и C ++ не поддерживают какие-либо метаданные времени выполнения о сопоставлениях имен функций, которые позволили бы это Если функция экспортируется из DLL, вы можете использовать GetProcAddress, чтобы найти ее адрес.
Если список функций статичен, вы можете создать отображение заранее.
Что-то вроде:
std:map<string, PVOID> functionMappings;
functionMappings["MyFunction"] = MyFunction;
// Later
PVOID function = functionMappings["MyFunction"];
__asm
{
push a;
call [function]
}
Некоторые заметки:
Я полагаю, что стандарт говорит, что указатель на функцию может быть больше, чем PVOID. Это должно работать на платформах Windows x86 / x64.
Вы не сказали, какое соглашение о вызовах вы использовали - этот код предполагает стандартный вызов.
Это очень, очень странная вещь, которую нужно решить - какую проблему вы пытаетесь решить?