首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getProcAddress -返回NULL

getProcAddress -返回NULL
EN

Stack Overflow用户
提问于 2012-04-21 00:51:12
回答 2查看 12.3K关注 0票数 5

我有以下代码:

代码语言:javascript
复制
  //mydll.cpp
    #include <Windows.h>
    #include <io.h>

    #define STDOUT_FILEDESC 1

    class MYSTDOUT {
        bool shouldClose;
        bool isBuffered;
    public:
        MYSTDOUT(bool buf = true, bool cl = true) 
            : isBuffered(buf),
              shouldClose(cl) 
        {}
        ~MYSTDOUT() {
            if (shouldClose) {
                close(STDOUT_FILEDESC);
            }
        }
    };

    __declspec(dllexport) void* mydll_init_stdout()
    {
        static MYSTDOUT outs;
        return &outs;
    }
//test_dll.cpp
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <io.h>


typedef void* (__cdecl *MYPROC)(void);


int main(void)
{
  int fd;
  void *pstdout;

  MYPROC init_stdout;
  HMODULE handle = LoadLibrary(TEXT("mydll.dll")); 

  init_stdout = (MYPROC)GetProcAddress(handle,"mydll_init_stdout");//NULL

  FreeLibrary((HMODULE) handle);
  return 0;
}

我知道init_stdout is NULL.What可能是个问题?句柄正常(非空)谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-21 00:53:47

这是由于名称混乱造成的。

您需要在extern "C"中将导出的函数包装为:

代码语言:javascript
复制
extern "C"
{
    __declspec(dllexport) void* mydll_init_stdout()
    {
        static MYSTDOUT outs;
        return &outs;
    }
}
票数 14
EN

Stack Overflow用户

发布于 2012-04-21 00:52:54

在Dependency Walker或dumpbin /exports中签入,您将看到导出的mydll_init_stdout带有损坏的C++名称。这就是GetProcAddress调用失败的原因。

使用extern "C"停止损坏。

代码语言:javascript
复制
extern "C" 
{
    __declspec(dllexport) void* mydll_init_stdout()
    {
        static MYSTDOUT outs;
        return &outs;
    }
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10250323

复制
相关文章

相似问题

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