0

我有一个使用 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
}

传入的值似乎在数组或其他东西中:

调试过程中的截图

知道为什么吗?

4

0 回答 0