少なくとも直接はできません。
callはパラメータとしてアドレスを取ります。「callfunctionName」と記述しても、リンカは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プラットフォームで機能するはずです。
使用している呼び出し規約については言及していません。このコードはstdcallを前提としています。
これは、達成したい非常に奇妙なことです。どのような問題を解決しようとしていますか?