Я работаю с ключом безопасности USB, который использует простой API. Все, что мне нужно сделать, это включить их заголовочный файл и сделать мои звонки. У меня есть пример программы на С, который отлично работает, и в значительной степени делает это:VC++ 6.0: слишком много фактических параметров
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 = ключ) вызов (. Я не понимаю, почему компилятор полагает, что в моем приложении слишком много параметров, но не в образце приложения. Я нашел article, относящийся к разнице между использованием GetProcAddress() таким образом в C или C++, но я не уверен, что это проблема, которую я вижу здесь, или как я применил бы это решение в этом конкретном сценарии ,
Что мне нужно знать, так это то, как я могу скомпилировать этот код на C++.
VC 6? Я настоятельно рекомендую вам обновить свою инструментальную цепочку, чтобы ... ну что-нибудь еще на самом деле. –
Скомпилируете ли вы C, когда он работает, и как C++, если это не так? – ildjarn
Да, мы фактически пытаемся переместить нашу платформу (которая зависит от нескольких библиотек, которые никогда не вели себя должным образом за пределами VC6) до современной среды. –