3

为什么名称修改仍然适用于func3()的签名。我错过了什么?我已经查看了这些先前提出的问题12 没有引用 DEF 文件。

// dllmain.cpp
#include "stdafx.h"

extern "C"  __declspec( dllexport ) double __cdecl func1(int id, double t)
{
    return(1.01);
};

extern "C" __declspec( dllexport ) int __cdecl func2(int id)
{
    return(2);
};

extern "C" __declspec( dllexport ) int __cdecl func3(char* file)
{
    return(1);
};

......

这是来自的输出dumpbin /EXPORTS

    00000000 characteristics
    51B78F5E time date stamp Tue Jun 11 13:58:06 2013
        0.00 version
           1 ordinal base
           3 number of functions
           3 number of names

    ordinal hint RVA      name

          1    0 00003870 func1 = func1
          2    1 00003880 func2 = func2
          3    2 00001A00 func3 = ?do_encoding@codecvt_base@std@@MEBAHXZ (protected: virtual int __cdecl std::codecvt_base::do_encoding(void)const )
4

1 回答 1

7

导出没有损坏,您可以在 dumpbin.exe 输出中清楚地看到未损坏的名称。您还会看到损坏的名称。那是 dumpbin.exe 有点太有用了,也许它还读取 .pdb 文件以查找函数的实际名称。它显示在 = 的右侧

只需删除 .pdb 文件并再次运行 dumpbin.exe 即可查看差异。

你没有问题,它起作用了。

于 2013-06-11T21:46:04.940 回答