首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetProcAddress()失败,错误127

GetProcAddress()失败,错误127
EN

Stack Overflow用户
提问于 2014-09-16 20:05:21
回答 5查看 18.9K关注 0票数 5

这是我的DLL代码:

代码语言:javascript
复制
#include <Windows.h>
#include <iostream>

int sysLol(char *arg);

int sysLol(char *arg)
{
   std::cout<<arg<<"\n";
   return 1;
}

下面是我的应用程序代码:

代码语言:javascript
复制
#include <Windows.h>
#include <iostream>
#include <TlHelp32.h>
#include <stdlib.h>

typedef int (WINAPI* Lol)(char* argv);
struct PARAMETERS
{
    DWORD Lol;
};

int main()
{
    PARAMETERS testData;
    HMODULE e = LoadLibrary(L"LIB.dll"); //This executes without problem
    if (!e) std::cout<<"LOADLIBRARY: "<<GetLastError()<<"\n";
    else std::cout<<"LOADLIBRARY: "<<e<<"\n";
    testData.Lol = (DWORD)GetProcAddress(e,"sysLol"); //Error 127?
    if (!testData.Lol) std::cout<<testData.Lol<<" "<<GetLastError()<<"\n";
    else std::cout<<"MESSAGEBOX: "<<testData.Lol<<"\n";
    std::cin.ignore();
    return 1;
}

因此,我的LIB.dll已经成功地使用LoadLibrary()加载,而GetProcAddress()却在127中失败。这似乎是因为它找不到我的函数名,但我不明白为什么会失败。

非常感谢!:) ~P

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-09-16 20:32:33

由于该标记是C++,因此需要为函数声明一个C名称:

代码语言:javascript
复制
extern "C" int sysLol(char *arg);

您可以看到编译器为您的C++函数提供了依赖沃克的实际名称。

成功后,将函数转换为GetProcAddress返回的指向实际函数类型的指针:

代码语言:javascript
复制
typedef int (*sysLol_t)(char *arg);
sysLol_t pFunc = GetProcAddress(e,"sysLol");
票数 5
EN

Stack Overflow用户

发布于 2014-09-16 20:09:14

这就是ERROR_PROC_NOT_FOUND,这意味着不存在具有该名称的导出函数。

没什么可说的了。也许你的名字弄错了。这可能是一个简单的字母错配的情况。可能DLL的构建不正确,并且没有导出函数。也许DLL正在修饰或损坏名称。当然,从问题中的代码来看,没有证据表明您试图导出函数,或者确实禁止装饰/损坏。

使用像dumpbin或Dependency这样的工具来检查导出的函数的名称。这可能会对这个问题有所启示。

与运行时使用LoadLibraryGetProcAddress进行链接不同,在加载时链接要方便得多。使用生成DLL时生成的.lib导入库进行此操作。

还值得指出的是,调用约定不匹配。DLL端有cdecl,可执行端有stdcall。也不要将指针投到DWORD。当您编译64位时,结果会很糟糕。

票数 2
EN

Stack Overflow用户

发布于 2014-09-16 20:48:01

符号必须从Windows DLL显式导出。要么将您的函数声明为__declspec(dllexport),要么将一个declare传递给链接器,以指示它导出您的函数。请参阅

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25877507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档