使用带有错误导出的C ++ DLL

时间:2013-09-03 17:23:07

标签: c++ dll wrapper

我被赋予了以DLL形式编写现有C ++代码库的包装器的工作。我正在运行的问题是DLL导出名称被破坏了。我可以/应该在将它们传递给GetProcAddress时使用受损的名称吗?或者有更好的办法吗?

编辑:我没提到。我无权访问代码,以便允许我以任何方式修改dll。

EDIT2:事实证明我可以访问此DLL的代码(.h和.cpp),但我无法修改所述代码。

2 个答案:

答案 0 :(得分:0)

因为你有源代码(不可修改)。

使用DLL源代码文件创建项目。 使用

创建wrapper.cpp / wrapper.h

// wrapper.h

#ifndef WRAPPER_H
#define WRAPPER_H

extern "C" {

    void wrapper_function1();
    // and so on
}
#endif

// wrapper.cpp

#include "wrapper.h"
#include "dll.h"

extern "C" {
    void wrapper_function1() { /* code which may call functions from dll.h */ }
    // And so on
}

所以你的新DLL没有名称错误。

答案 1 :(得分:0)

我最终解决的问题是我提出的具体问题是以下功能。它在我的情况下工作,因为出口名称只是略有损坏。

static FARPROC getFunctionPointer(HINSTANCE dll, const char *baseName)
{
    char buf[256];
    FARPROC fp;
    sprintf(buf,"%s",baseName);
    fp = GetProcAddress(dll,buf);
    if (fp == 0)
    {
      sprintf(buf,"_%s",baseName);
      fp = GetProcAddress(dll,buf);
    }
    if (fp == 0)
    {
      sprintf(buf,"_%s@4",baseName);
      fp = GetProcAddress(dll,buf);
    }
    if (fp == 0)
    {
      sprintf(buf,"_%s@8",baseName);
      fp = GetProcAddress(dll,buf);
    }
    if (fp == 0)
    {
      sprintf(buf,"_%s@0",baseName);
      fp = GetProcAddress(dll,buf);
    }

    if (fp == 0)
    {
        printf("ERROR: Could not locate function: %s \n", baseName);
    }
    return fp;
}