我有用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)並查看返回值被處理。 –
幫助解散代碼。我能夠看到如何初始化要調用的方法的堆棧並返回要檢索的值。謝謝! –