代理DLL中无法解析的外部符号

shadeMe

我正在尝试为“ Version.dll”构建代理DLL,但一直遇到与导出功能有关的错误。

00000000 characteristics
4A5BC9E3 time date stamp Tue Jul 14 05:27:23 2009
    0.00 version
       1 ordinal base
      15 number of functions
      15 number of names

ordinal hint RVA      name

      1    0 00001B14 GetFileVersionInfoA
      2    1 00001E40 GetFileVersionInfoByHandle
      3    2 0000193C GetFileVersionInfoExW
      4    3 00001AB4 GetFileVersionInfoSizeA
      5    4 000014E8 GetFileVersionInfoSizeExW
      6    5 000015FC GetFileVersionInfoSizeW
      7    6 00001614 GetFileVersionInfoW
      8    7 00002820 VerFindFileA
      9    8 00003F50 VerFindFileW
     10    9 00002AF0 VerInstallFileA
     11    A 000043F8 VerInstallFileW
     12    B          VerLanguageNameA (forwarded to KERNEL32.VerLanguageNameA)
     13    C          VerLanguageNameW (forwarded to KERNEL32.VerLanguageNameW)
     14    D 00001B94 VerQueryValueA
     15    E 000015E0 VerQueryValueW

我的代码如下所示:

extern "C"
{
    BOOL WINAPI DllMain(HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved)
    {
        if (dwReason == DLL_PROCESS_ATTACH)
        {
            DisableThreadLibraryCalls((HMODULE)hDllHandle);

            // do stuff
        }

        return TRUE;
    }

DWORD APIENTRY Wrapper_GetFileVersionInfoSizeExA(__in DWORD dwFlags, __in LPCSTR lpwstrFilename, __out LPDWORD lpdwHandle)
    {
        return ::GetFileVersionInfoSizeExA(dwFlags, lpwstrFilename, lpdwHandle);
    }

// and so on for the rest
}

导出定义文件:

LIBRARY Version
EXPORTS
GetFileVersionInfoA=Wrapper_GetFileVersionInfoA
GetFileVersionInfoByHandle=Wrapper_GetFileVersionInfoByHandle
GetFileVersionInfoExW=Wrapper_GetFileVersionInfoExW
GetFileVersionInfoSizeA=Wrapper_GetFileVersionInfoSizeA
GetFileVersionInfoSizeExW=Wrapper_GetFileVersionInfoSizeExW
GetFileVersionInfoSizeW=Wrapper_GetFileVersionInfoSizeW
GetFileVersionInfoW=Wrapper_GetFileVersionInfoW
VerFindFileA=Wrapper_VerFindFileA
VerFindFileW=Wrapper_VerFindFileW
VerInstallFileA=Wrapper_VerInstallFileA
VerInstallFileW=Wrapper_VerInstallFileW
VerLanguageNameA=Wrapper_VerLanguageNameA
VerLanguageNameW=Wrapper_VerLanguageNameW
VerQueryValueA=Wrapper_VerQueryValueA
VerQueryValueW=Wrapper_VerQueryValueW

我正在使用不同的函数名称来防止包含Windows.h头文件的原型重新定义错误。尝试构建以上内容会产生以下错误:

1>Main.obj : error LNK2001: unresolved external symbol _GetFileVersionInfoW@16
1>Main.obj : error LNK2001: unresolved external symbol _VerQueryValueA@16
1>Main.obj : error LNK2001: unresolved external symbol _GetFileVersionInfoSizeA@8
1>Main.obj : error LNK2001: unresolved external symbol _VerQueryValueW@16
1>Main.obj : error LNK2001: unresolved external symbol _GetFileVersionInfoSizeExW@12
1>Main.obj : error LNK2001: unresolved external symbol _VerInstallFileA@32
1>Main.obj : error LNK2001: unresolved external symbol _VerInstallFileW@32
1>Main.obj : error LNK2001: unresolved external symbol _GetFileVersionInfoA@16
1>Main.obj : error LNK2001: unresolved external symbol _GetFileVersionInfoExW@20
1>Main.obj : error LNK2001: unresolved external symbol _GetFileVersionInfoSizeW@8
1>Main.obj : error LNK2001: unresolved external symbol _VerFindFileW@32
1>Main.obj : error LNK2001: unresolved external symbol _GetFileVersionInfoSizeExA@12
1>Main.obj : error LNK2001: unresolved external symbol _GetFileVersionInfoExA@20

诚然,这是我第一次尝试构建代理DLL,因此我可能会遗漏一些明显的东西。谢谢。

戴维·赫弗南

链接器错误消息告诉您DLL不提供的定义GetFileVersionInfoWVerQueryValueA等等。这是代理DLL的事实并没有真正改变。这是标准的经典链接器故障。您已经声明了一个函数,但未提供其定义。

您最有可能希望这些功能实现来自系统DLL Version.dll在这种情况下,您需要向version.lib链接器提供适当的导入库,以提供定义。

当您遇到此类错误时,总是值得阅读文档它说:

代码引用了链接程序在库和目标文件中找不到的某些内容(例如函数,变量或标签)。

在我看来,这再清楚不过了。您引用了已声明但未定义的内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用外部dll时无法解析的外部符号

来自分类Dev

_yylval是无法解析的外部符号

来自分类Dev

无法解析的外部符号NtCreateKey

来自分类Dev

qtmaind.lib中无法解析的外部符号

来自分类Dev

libgcrypt.lib中无法解析的外部符号

来自分类Dev

LNK2019:C ++ / CLI中无法解析的外部符号

来自分类Dev

错误:LNK2019:Qt中无法解析的外部符号

来自分类Dev

VS2010中无法解析的外部符号

来自分类Dev

libgcrypt.lib中无法解析的外部符号

来自分类Dev

LNK2019错误(无法解析的外部符号)将SQLite链接到DLL

来自分类Dev

Qt:Windows函数是无法解析的外部符号

来自分类Dev

无法解析的外部符号__report_rangecheckfailure

来自分类Dev

C ++ DirectX 9无法解析的外部符号

来自分类Dev

无法解析的外部符号构建Python模块

来自分类Dev

无法在Scala中解析符号++

来自分类Dev

LNK2019:未解析的外部符号-隐式DLL

来自分类Dev

主外部函数的C ++“无法解析的外部符号”

来自分类Dev

C中未解析的外部符号

来自分类Dev

Qt 5.4静态生成在Visual Studio 2013中产生“无法解析的外部符号”链接错误

来自分类Dev

错误LNK2019:函数main中引用了无法解析的外部符号

来自分类Dev

错误21错误LNK2019:无法解析的外部符号:....在函数:...中引用。

来自分类Dev

错误LNK2019:函数___tmainCRTStartup中引用了无法解析的外部符号_wWinMain @ 16

来自分类Dev

仅少数方法(静态或共享库)中无法解析的外部符号

来自分类Dev

使用NASM在Windows x64汇编程序中无法解析的外部符号printf

来自分类Dev

错误LNK2019:函数main中引用了无法解析的外部符号

来自分类Dev

无法解析的外部符号,用于.def文件中带有DATA的定义

来自分类Dev

使用defalt args时在函数_main中引用的错误LNK2019无法解析的外部符号

来自分类Dev

无法链接CPP文件-无法解析的外部符号

来自分类Dev

无法解析的外部符号-在更新到vss2015之后

Related 相关文章

  1. 1

    使用外部dll时无法解析的外部符号

  2. 2

    _yylval是无法解析的外部符号

  3. 3

    无法解析的外部符号NtCreateKey

  4. 4

    qtmaind.lib中无法解析的外部符号

  5. 5

    libgcrypt.lib中无法解析的外部符号

  6. 6

    LNK2019:C ++ / CLI中无法解析的外部符号

  7. 7

    错误:LNK2019:Qt中无法解析的外部符号

  8. 8

    VS2010中无法解析的外部符号

  9. 9

    libgcrypt.lib中无法解析的外部符号

  10. 10

    LNK2019错误(无法解析的外部符号)将SQLite链接到DLL

  11. 11

    Qt:Windows函数是无法解析的外部符号

  12. 12

    无法解析的外部符号__report_rangecheckfailure

  13. 13

    C ++ DirectX 9无法解析的外部符号

  14. 14

    无法解析的外部符号构建Python模块

  15. 15

    无法在Scala中解析符号++

  16. 16

    LNK2019:未解析的外部符号-隐式DLL

  17. 17

    主外部函数的C ++“无法解析的外部符号”

  18. 18

    C中未解析的外部符号

  19. 19

    Qt 5.4静态生成在Visual Studio 2013中产生“无法解析的外部符号”链接错误

  20. 20

    错误LNK2019:函数main中引用了无法解析的外部符号

  21. 21

    错误21错误LNK2019:无法解析的外部符号:....在函数:...中引用。

  22. 22

    错误LNK2019:函数___tmainCRTStartup中引用了无法解析的外部符号_wWinMain @ 16

  23. 23

    仅少数方法(静态或共享库)中无法解析的外部符号

  24. 24

    使用NASM在Windows x64汇编程序中无法解析的外部符号printf

  25. 25

    错误LNK2019:函数main中引用了无法解析的外部符号

  26. 26

    无法解析的外部符号,用于.def文件中带有DATA的定义

  27. 27

    使用defalt args时在函数_main中引用的错误LNK2019无法解析的外部符号

  28. 28

    无法链接CPP文件-无法解析的外部符号

  29. 29

    无法解析的外部符号-在更新到vss2015之后

热门标签

归档