Я работаю с USB-ключом безопасности, который использует простой API. Все, что мне нужно сделать, это включить их заголовочный файл и позвонить. У меня есть пример программы на C, которая отлично работает и в значительной степени делает это:
HINSTANCE hDll;
FARPROC dongle;
WORD retcode, handle[16], SD_p1, SD_p2, SD_p3, SD_p4;
DWORD lp1, lp2;
BYTE buffer [1024];
SD_p1 = 0x1C76; // example password 1
SD_p2 = 0x8078; // example password 2
SD_p3 = 0;
SD_p4 = 0;
hDll = GetModuleHandle("dongle.dll");
if (hDll == NULL)
{
hDll = LoadLibrary("dongle.dll");
if (hDll == NULL)
{
printf("Can't find dongle.dll\n");
return;
}
}
dongle = GetProcAddress(hDll, "dongle");
retcode = dongle(SD_FIND, &handle[0], &lp1, &lp2, &SD_p1, &SD_p2, &SD_p3, &SD_p4, buffer);
Так что с этим все отлично работает. Ключ найден, и последующие вызовы различных функций на ключе также работают. Однако, когда я вставляю точно такой же код в приложение C ++, которое хочу защитить, я получаю следующую ошибку:
error C2197: 'int (__stdcall *)(void)' : too many actual parameters
Это происходит при вызове retcode = dongle (). Я не понимаю, почему компилятор считает, что в моем приложении слишком много параметров, но их нет в примере приложения. Я нашел статью о разнице между использованием GetProcAddress () таким образом в C и C ++. , но я не уверен, является ли это проблемой, которую я здесь вижу, или как я бы применил это решение в этом конкретном сценарии.
Что мне нужно знать, так это то, как я могу заставить этот код C скомпилировать на C ++.