C++ x86 dll 在调用 GetProcAddress 时给出错误 127

问题描述 投票:0回答:0

我在尝试使用

LoadLibrary()
GetProcAddress()
在我的 Visual Studio 2019 项目中加载 x86 DLL 文件时遇到问题。我的项目由两部分组成,Add32 和 Test32。 Add32 项目在 x86 体系结构中构建一个 DLL 文件,其中包含一个将两个数字相加的函数。 Test32 项目在 x86 架构中运行,并使用 LoadLibrary() 和
GetProcAddress()
加载 Add32.dll 文件。但是
GetProcAddress()
加载时返回null,提示出错

我已确认该问题在 Windows 10 x86 中仍然存在,并且

GetLastError()
处的
GetProcAddress()
函数返回错误代码 127。

请注意,x86 配置的两个项目都没有任何错误地构建,并且在执行 Test32 项目时得出上述结论。

使用 x64 配置构建的相同项目工作得很好。构建和执行期间没有错误。

动态链接代码


extern "C" __declspec(dllexport) int __stdcall sum(int a, int b) {
    return a + b;
}


测试代码


#include <iostream>
#include <Windows.h>

using namespace std;

typedef int (*add)(int, int);

int main() {
    HINSTANCE dll = LoadLibrary(TEXT("Add32.dll"));
    if (!dll) {
        cout << "Failed DLL" << endl;
        cout << "DLL Error: " << GetLastError() << endl;
        return -1;
    }

    add a = reinterpret_cast<add>(GetProcAddress(dll, "sum"));

    if (!a) {
        cout << "Failed Function" << endl;
        // Code comes here and shows the 127 error code.
        cout << "Function Error: " <<GetLastError()<< endl;
    }

    cout << a(2, 3) << endl;
    return 0;

}

什么可能导致这个问题,我该如何解决?

我已尝试通过确保正确构建 DLL 文件并包含正确的函数来解决此问题,但问题仍然存在。我还尝试运行 dumpbin 以确保正确导出函数,这也证实了这一点。

c++ winapi dll visual-studio-2019 getprocaddress
© www.soinside.com 2019 - 2024. All rights reserved.