我只是想知道如何在我的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;
答案 0 :(得分:4)
在Windows中,您可以使用GetLastError来检索错误,然后FormatMessage将其转换为您可以使用的字符串。
答案 1 :(得分:1)
使用GetLastError
检索错误代码。使用FormatMessage
获取其文字说明(页面底部有一个示例)。
答案 2 :(得分:1)
我使用FormatMessage函数。
答案 3 :(得分:1)
看看函数FormatMessage。您可以传递FORMAT_MESSAGE_FROM_SYSTEM标志和GetLastError()返回的错误代码。