VS 2012命名修改仍然适用于dll导出

bar*_*onm 3 dll winapi dllexport

为什么名称重整仍然适用于func3()签名.我错过了什么?我查看了这些以前提出的问题1,2个 NO 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);
};

......
Run Code Online (Sandbox Code Playgroud)

这里的输出来自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 )
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 7

导出不会被破坏,您可以清楚地看到dumpbin.exe输出中未编码的名称.你看到了错位的名字.那个dumpbin.exe有点太有用了,也许,它还会读取.pdb文件来查找函数的实际名称.它显示在=的右侧

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

你没有问题,它有效.