我想使用MIT Kerberos實現(使用k4w-4.0.1中的krb5_32.dll和相關聯的頭文件)來獲取TGT和服務票據。導入的DLL函數拋出「術語不計算爲一個函數帶1個參數」錯誤
我已經加載了krb5_init_context函數,它根據頭文件google和SO只接受1個參數(krb5_context結構體)並填充它。
#include "stdafx.h"
#include "windows.h"
#include "krb5.h"
typedef int krb5_int32;
typedef krb5_int32 krb5_error_code;
int _tmain(int argc, _TCHAR* argv[])
{
HMODULE kerberos = LoadLibrary(L"krb5_32.dll");
HANDLE krb5_init_context = NULL;
if(kerberos == NULL)
{
printf("Failed to load library!\n");
printf("%lu", GetLastError());
return -1;
}
else
{
printf("Library krb5_32.dll loaded successfully!\n");
}
if((krb5_init_context = GetProcAddress(kerberos, "krb5_init_context")) == NULL)
{
printf("GetProcAddress for krb5_init_context failed!\n");
return -1;
}
else
{
printf("Function krb5_init_context loaded successfully!\n");
}
krb5_context context = NULL;
krb5_ccache cache = NULL;
krb5_principal client_princ = NULL;
char* name = NULL;
krb5_keytab keytab = 0;
krb5_creds creds;
krb5_get_init_creds_opt *options = NULL;
krb5_error_code error_code = 0; //error_status_ok;
error_code = (*krb5_init_context)(&context);
printf("Error Code: " + error_code);
while(true);
return 0;
}
'krg5_init_context'是一個句柄,它不是一個函數指針。如果你想要它是函數指針,請將它聲明爲一個。 – PaulMcKenzie
所以看看這個https://msdn.microsoft.com/en-us/library/64tkc9y5.aspx和其他一些頁面,我認爲它必須是一個句柄?我可以直接指定一個指向'GetProcAddress'的輸出嗎? – T3CHN0CR4T
看到我的答案。 'HANDLE'是通用的。您需要將返回值轉換爲函數指針。 – PaulMcKenzie