シンプルな 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++ でコンパイルする方法です。