我有一个使用 C++ 编写的 DLL。我在运行时使用 将这个 DLL 加载到另一个 C++(控制台)项目中LoadLibrary()
,然后通过GetProcAddress()
.
这是DLL代码:
SHARED_CLASS string hill(string inmode, string inkey, string xinpassword, string outpword);
这是我加载和调用函数的方式:
typedef string(_cdecl* MYPROC)(string inmode, string inkey, string xinpassword, string outpword);
HMODULE hInst = LoadLibrary(TEXT("Cipher.dll"));
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
if (hInst == NULL)
{
cout << "NOT LOADED";
cout << "\n";
}
else
{
cout << "LOADED";
cout << "\n";
ProcAdd = (MYPROC)GetProcAddress(hInst, "hill");
if (NULL != ProcAdd)
{
fRunTimeLinkSuccess = TRUE;
passwordmew = (ProcAdd)("-e", "xxxxxx", "lcgoanhoehfogjdclkmdmlmb", passwordmew);
}
else
{
DWORD dwError = 0;
dwError = GetLastError();
}
}
我加载和调用函数没有问题(它正在调用正确的函数),问题是在将参数传递给函数时,传递给函数的值与我调用时的值不同功能。
在 DLL 函数内部,我有这个条件,如果你在我的代码中看到当我调用我"-e"
为第一个参数传递的函数时,它应该属于该if
条件,但它却属于该else
条件。我对其进行了调试,发现所有参数值都是一样的。
if (inmode == "-e")
{
//it should go here
}
else
{
//instead it goes here
}
传入的值似乎在数组或其他东西中:
知道为什么吗?