在发布这个问题之前,我已经阅读了一些文档,SO答案和观看了一些视频来理解
但我仍然无法理解使用
我遇到了以下代码,当关闭OPC-UA客户端时调用它。我看到这应该遵循
__stdcall
。到目前为止,我已经理解了它是一种调用约定,并指定将参数从右到左推到堆栈上。这也表示何时清除堆栈。但我仍然无法理解使用
__stdcall
的优点和应用场景。我遇到了以下代码,当关闭OPC-UA客户端时调用它。我看到这应该遵循
__stdcall
调用约定,但为什么?如果未为以下方法指定__stdcall
,可能会发生什么?OpcUa_StatusCode __stdcall opcua_client::onShutdownMessage(OpcUa_Handle hApplication, OpcUa_Handle hSession, OpcUa_String strShutdownMessage, void* extraParam)
{
opcua_client* pOpcClient = NULL;
if (extraParam)
{
try
{
pOpcClient = qobject_cast <opcua_client*>((QObject*)extraParam);
throw(55);
}
catch (int exeption)
{
}
}
OpcUa_StatusCode uStatus = OpcUa_Good;
QString strShutDownMsg = QString::fromUtf8(OpcUa_String_GetRawString(&strShutdownMessage));
bool bOK;
OpcUa_StatusCode uClientLibStatus = uClientLibStatus = strShutDownMsg.toUInt(&bOK, 16);
if (pOpcClient)
{
if (uClientLibStatus > 0)
pOpcClient->process_onShutdownMessage(uClientLibStatus);
}
else
{
return uStatus;
}
return uStatus;
}