我有用C++编写的方法返回一个对象。这个方法是通过程序集调用的(一个非常长时间的原因)。例如:从程序集中调用C++方法返回对象数据
Person DoStuff(int a)
{
Person output;
output.Name = "Koder";
output.Age = 1337;
output.Cash = 80.86;
cout << "Given number is " << a << endl;
return output;
}
我知道价值回报是讨厌和坏,但这个问题不是这个问题。调用此方法如下所示:
Variant vMethod = &DoStuff;
void* pMethod = vMethod.As<void*>();
int paramVal = 78;
int* retVal = nullptr;
__asm
{
push paramVal
call pMethod
mov retVal, EAX
}
当此方法的返回值为int时,此功能完美无缺。但是现在返回一个对象,实际的call
指令引发了一个异常。您可以猜到,例外是return
声明。我知道这会发生,当我这样写,但我不知道如何检索非原始(或非整数,就此而言)返回值。谷歌搜索C++ /汇编函数调用没有帮助很多。感谢任何能提供帮助的人。
我对此没有线索......我最好的猜测是:使用C++调用函数,然后不生成可执行文件,尝试生成汇编代码(gcc -S)并查看返回值被处理。 –
帮助解散代码。我能够看到如何初始化要调用的方法的堆栈并返回要检索的值。谢谢! –