간단한 API를 사용하는 USB 보안 키로 작업하고 있습니다. 내가해야 할 일은 헤더 파일을 포함하고 내 전화를하는 것뿐입니다. 나는 잘 작동하는 샘플 C 프로그램을 가지고 있으며, 거의 이것을 수행한다.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);
이렇게 모든 것이 잘 동작한다. 동글이 발견되고 나중에 동글 작업의 다른 기능을 호출합니다. 이것은 RETCODE = 동글에 무슨 일이 일어나고
error C2197: 'int (__stdcall *)(void)' : too many actual parameters
() 호출 : 나는 C에 내가 보호하려는 ++ 응용 프로그램이 동일한 코드를 연결하면 그러나, 나는 다음과 같은 오류가 발생합니다. 나는 왜 컴파일러가 내 애플리케이션에는 너무 많은 매개 변수가 있지만 샘플 애플리케이션에는 없다고 생각하는지 이해하지 못한다. 나는 article GetProcAddress() C 대 C++에서이 방법을 사용하는 것의 차이점을 발견했는데, 이것이 내가 여기에서 보는 문제인지 또는이 특정 시나리오에서 그 솔루션을 어떻게 적용 할 것인지는 확실하지 않다. .
내가 알아야 할 것은이 C 코드를 어떻게 C++에서 컴파일 할 수 있는지입니다.
VC 6? 나는 당신이 툴체인을 ... 정말로 잘 업데이트하도록 강력히 추천합니다. –
작동 할 때 C로 컴파일하고 그렇지 않으면 C++로 컴파일합니까? – ildjarn
예, 우리는 실제로 우리의 플랫폼 (VC6 이상으로 올바르게 작동하지 않는 여러 라이브러리에 의존하는)을 현대적인 환경으로 옮기는 과정에 있습니다. –