получить данные в другой файл .cpp

0

Я работаю над онлайн-игрой, и у меня есть проблема с получением результатов 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

как я могу получить эти 2 результата в первом файле cpp, где я сделал запрос?

edit: первый файл 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
}

Я действительно не знаю, что делать. Im действительно новичок

вот полный источник https://www.sendspace.com/file/oc5v34 на PacketAuthServer.cpp Я запускаю запрос в AuthQueryServer.h Я выполняю запрос

  • 0
    Вы пробовали передавать данные по параметрам или в качестве возвращаемых значений. Кстати, используйте std::string вместо массивов char . Смотрите также std::string::c_str() .
  • 0
    Но если я сделаю запрос со многими результатами, то это не будет хорошо
Теги:

1 ответ

0
Лучший ответ

Не обращайте внимания на предыдущий ответ. Проблема с предыдущим ответом заключается в том, что он ожидал, что databaseManager.Query будет синхронным и выполнить CQuery_AuthServer::ExecuteQuery прежде чем он вернется к вызывающему. На самом деле это не так - он просто добавляет запрос в очередь, и ваша структура управления базами данных не дает вам возможности дождаться завершения этого запроса.
Вы должны прочитать руководство NtlDatabase, чтобы узнать, как делать синхронные вызовы базы данных

Ещё вопросы

Сообщество Overcoder
Наверх
Меню