从LogonUser函数获取上一个错误并将其作为字符串返回?

时间:2009-07-02 16:04:48

标签: c++ string error-handling

我只是想知道如何在我的C ++程序中获取导致LoginUser函数失败的错误并将其作为String返回?

JNIEXPORT jstring JNICALL Java_com_entrust_adminservices_urs_examples_authn_LdapAuthenticator2_takeInfo(JNIEnv *env, jobject obj, jstring domain, jstring id, jstring idca, jstring password) 
{
    const char *nt_domain;
    const char *nt_id;
    const char *nt_password;

    nt_domain = env->GetStringUTFChars(domain, NULL);
    nt_id = env->GetStringUTFChars(id, NULL);
    nt_password = env->GetStringUTFChars(password, NULL);
    HANDLE hToken = 0;
    char *otherString;
    bool aut = true;

    aut = LogonUser(nt_id, nt_domain, nt_password, LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, &hToken );

    if(aut)
    {
        otherString = "true";
    }
    else
    {
        otherString = //how would i get the last error here?
    }
    jstring newString = env->NewStringUTF((const char*)otherString);
    return newString;
}

int main()
{
    return 0;
}

由于 -Pete

编辑:

谢谢你们,做到了:

DWORD dwError = GetLastError();
LPVOID lpMsgBuf;

FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT ), (LPTSTR) &lpMsgBuf, 0, NULL );
otherString = (char*)lpMsgBuf;

4 个答案:

答案 0 :(得分:4)

在Windows中,您可以使用GetLastError来检索错误,然后FormatMessage将其转换为您可以使用的字符串。

答案 1 :(得分:1)

使用GetLastError检索错误代码。使用FormatMessage获取其文字说明(页面底部有一个示例)。

答案 2 :(得分:1)

我使用FormatMessage函数。

答案 3 :(得分:1)

看看函数FormatMessage。您可以传递FORMAT_MESSAGE_FROM_SYSTEM标志和GetLastError()返回的错误代码。