我正在使用使用简单 API 的 USB 安全密钥。我所要做的就是包含他们的头文件并拨打我的电话。我有一个可以正常工作的示例 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() 调用上。我不明白为什么编译器会认为我的应用程序中有太多参数,但在示例应用程序中却没有。我确实找到了一篇关于在 C 与 C++ 中以这种方式使用 GetProcAddress() 之间的区别的文章,但我不确定这是否是我在这里看到的问题,或者我将如何在这个特定场景中应用该解决方案.
我需要知道的是如何让这个 C 代码在 C++ 中编译。