获取其他.cpp文件中的数据

时间:2014-06-15 14:09:26

标签: c++ sql

我在网络游戏上工作,我将ms-sql结果转换为其他cpp文件时遇到问题。

cpp file1启动查询:

databaseManager.Query( hDB, new CQuery_AuthServer(req->awchUserId, req->awchPasswd);

req-> awchUserId和req-> awchPasswd是来自套接字的数据(用户名和密码)

现在在cpp file2上我在类

中执行查询
class CQuery_AuthServer : public CNtlQuery
{
public:
    CQuery_AuthServer(const WCHAR * lpszUserID, const WCHAR * lpszUserPW)
    {
        ZeroMemory( m_szUserID, MAX_SIZE_USER_ID + 1 );
        ZeroMemory( m_szUserPW, MAX_SIZE_USER_PW + 1 );

        memcpy(m_szUserID, lpszUserID, MAX_SIZE_USER_ID);
        memcpy(m_szUserPW, lpszUserPW, MAX_SIZE_USER_PW);
    }

    int ExecuteQuery(CNtlDatabaseConnection * pConnection)
    {
        FIND_SQLUNIT( SP_AuthLogin, pConnection, pSqlUnit2 );
        if( NULL == pSqlUnit2 )
        {
            return NTL_FAIL;
        }

        strncpy_s( pSqlUnit2->m_szUserID, m_szUserID, MAX_SIZE_USER_ID );
        strncpy_s( pSqlUnit2->m_szUserPW, m_szUserPW, MAX_SIZE_USER_ID );

        pSqlUnit2->Exec();
        printf("ExecuteQuery Done: result: %i ACC ID: %i \n", pSqlUnit2->m_nResultCode, pSqlUnit2->m_dwAccountID );

        return NTL_SUCCESS;
    }

public:
    char                m_szUserID[MAX_SIZE_USER_ID + 1];
    char                m_szUserPW[MAX_SIZE_USER_PW + 1];
};

查询

需要这样做
    BEGIN_DECLARE_SQLUNIT( SP_AuthLogin, "{ ? = call AuthLogin(?,?,?) }" )
    BEGIN_VARIABLE()
        char    m_szUserID[MAX_SIZE_USER_ID + 1];
        char    m_szUserPW[MAX_SIZE_USER_PW + 1];
        int     m_dwAccountID;
        int     m_nResultCode;
    END_VARIABLE()
    BEGIN_PARAM(3)  
        PARAM_ENTRY(SQL_PARAM_OUTPUT, m_nResultCode)    
        PARAM_ENTRY_STR(SQL_PARAM_INPUT, m_szUserID)
        PARAM_ENTRY_STR(SQL_PARAM_INPUT, m_szUserPW)
        PARAM_ENTRY(SQL_PARAM_OUTPUT, m_dwAccountID)
    END_PARAM()
END_DECLARE_SQLUNIT()

现在我可以得到结果,但结果仅适用于 int ExecuteQuery 查询结果为:

pSqlUnit2->m_nResultCode
pSqlUnit2->m_dwAccountID

如何在我进行查询的第一个cpp文件中获取这2个结果?

编辑:第一个cpp文件:

void CClientSession::SendCharLogInReq(CNtlPacket * pPacket) 
{
    sUA_LOGIN_REQ * req = (sUA_LOGIN_REQ *)pPacket->GetPacketData();


    HDATABASE hDB = INVALID_HDATABASE;
    CNtlDatabaseManager databaseManager;

    databaseManager.Query( hDB, new CQuery_AuthServer(req->awchUserId, req->awchPasswd) );
    //WANT RESULT HERE
}

我真的不知道该怎么做..我真的是新手

这是完整的来源https://www.sendspace.com/file/oc5v34 在PacketAuthServer.cpp我运行查询 在AuthQueryServer.h我执行查询

1 个答案:

答案 0 :(得分:0)

忽略之前的答案。上一个答案的问题是期望databaseManager.Query是同步的,并且在之前执行CQuery_AuthServer::ExecuteQuery 它会返回给调用者。事实上它并不是 - 它只是将查询添加到队列中,而您的数据库管理框架并不能让您等待完成该查询。
您应该阅读NtlDatabase手册以了解如何进行同步数据库调用