Я пытаюсь использовать реализацию MIT Kerberos (используя krb5_32.dll из k4w-4.0.1 и связанный файл заголовка), чтобы получить билет TGT и Service.Импортированные функции DLL-функции «термин не оценивает функцию, принимающую 1 аргумент» error
Я загрузил функцию 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' является HANDLE, это не указатель на функцию. Если вы хотите, чтобы он был указателем функции, объявите его как единое целое. – PaulMcKenzie
Итак, глядя на этот https://msdn.microsoft.com/en-us/library/64tkc9y5.aspx и некоторые другие страницы, я думал, что это должен быть дескриптор? Могу ли я просто назначить указатель на результат «GetProcAddress» вместо этого? – T3CHN0CR4T
См. Мой ответ. «РУЧКА» является общей. Вам нужно передать возвращаемое значение указателю функции. – PaulMcKenzie