2.3. Login with C++/Unreal

You can download the DLL here.

Example of login with C++/Unreal

#if _WIN32 || _WIN64
#if _WIN64
#define ENV64BIT
BOOL GetProcAddresses(HINSTANCE *hLibrary, LPCWSTR lpszLibrary, INT nCount, ...)
{
    va_list va;
    va_start(va, nCount);

    if ((*hLibrary = LoadLibrary(lpszLibrary))
        != NULL)
    {
        FARPROC * lpfProcFunction = NULL;
        LPSTR lpszFuncName = NULL;
        INT nIdxCount = 0;
        while (nIdxCount < nCount)
        {
            lpfProcFunction = va_arg(va, FARPROC*);
            lpszFuncName = va_arg(va, LPSTR);
            if ((*lpfProcFunction =
                GetProcAddress(*hLibrary,
                    lpszFuncName)) == NULL)
            {
                lpfProcFunction = NULL;
                return FALSE;
            }
            nIdxCount++;
        }
    }
    else
    {
        va_end(va);
        return FALSE;
    }
    va_end(va);
    return TRUE;
}
#else
#define ENV32BIT
BOOL GetProcAddresses(HINSTANCE *hLibrary, LPCSTR lpszLibrary, INT nCount, ...)
{
    va_list va;
    va_start(va, nCount);

    if ((*hLibrary = LoadLibrary(lpszLibrary))
        != NULL)
    {
        FARPROC * lpfProcFunction = NULL;
        LPSTR lpszFuncName = NULL;
        INT nIdxCount = 0;
        while (nIdxCount < nCount)
        {
            lpfProcFunction = va_arg(va, FARPROC*);
            lpszFuncName = va_arg(va, LPSTR);
            if ((*lpfProcFunction =
                GetProcAddress(*hLibrary,
                    lpszFuncName)) == NULL)
            {
                lpfProcFunction = NULL;
                return FALSE;
            }
            nIdxCount++;
        }
    }
    else
    {
        va_end(va);
        return FALSE;
    }
    va_end(va);
    return TRUE;
}
#endif
#endif


private void idcfunctions()
{
    /*char buff[100];
    std::cin >> buff;*/
    //int(__stdcall* GetUserProfileInfo)(int, char*, char*, char*, char*, char*, char*, char*, char*, char*);
    int result;

    //GetAccessData Parameters
    int idcgameid;
    char idctk[1024];
    char idcuuid[1024];
    int userid;
    char usercrc[1024];
    char country[3];
    char language[3];
    char currency[3];


    //GetUserProfileInfo Parameters
    //int userid = 1; //userid is already defined for GetAccessData
    char secret[] = "test";
    char nick[80];
    char email[320];
    char status[1024];
    char avatar[1024];
    char custom[1024];

    typedef int (WINAPI *GETACCESSDATA)
        (int, LPCSTR, LPCSTR, int*, LPCSTR, LPCSTR, LPCSTR, LPCSTR);
    GETACCESSDATA GetAccessData = NULL;
    typedef int (WINAPI *GETUSERPROFILEINFO)
        (int, LPCSTR, LPCSTR, LPCSTR, LPCSTR, LPCSTR, LPCSTR);
    GETUSERPROFILEINFO GetUserProfileInfo = NULL;
    HINSTANCE hLib;
    //Params: Instance, libname, number of functionts to import, function pointer 1, function name 1, function pointer 2, function name 2...
    if(GetProcAddresses(&hLib, L"idclib.dll", 2, &GetAccessData, "GetAccessData", &GetUserProfileInfo, "GetUserProfileInfo"))
    {
        gameid = 1;
        char idctkaux[1024] = "ae854aeb5b7397da99b5c8aed5eb8cea";
        strcpy_s(idctk, strlen(idctkaux) + 1, idctkaux);
        char uuidaux[1024] = "6022DAAE-03F7-11E9-BB88-E86A6485A3C7";
        strcpy_s(uuid, strlen(uuidaux) + 1,uuidaux);
        result = GetAccessData(idcgameid, idctk, idcuuid, &userid, usercrc, country, language, currency);
        if (result == 0) {
            //Success
            result = GetUserProfileInfo(userid, secret, nick, email, status, avatar, custom, country, language, currency);
            if (result == 0) {
                //Success
            }
        }
    }
    if (hLib != NULL)
        FreeLibrary(hLib);
}

Last updated