__stdcall的优点/用途是什么?

平方公里

在发布此问题之前,我已经阅读了一些文档,SO解答和观看了一些视频以了解__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;
}
皮本

opcua_client::onShutdownMessage看起来像回调函数。也就是说,一个发送到某个API的函数,该API稍后会调用该函数。然后,在这种情况下,回调函数必须具有API期望的调用约定__stdcall由于__stdcall是Win32平台上的默认调用约定,因此在为Win32构建时不必指定它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章