2015-08-24 142 views
1

我在VS2010创建了一个简单的dll用下面的函数:32位和64位库装饰

extern "C" 
{ 
    __declspec(dllexport) int myFunc() 
    { 
    return 1; 
    } 
} 

我比较了生成的DLL和lib文件既x64和Win32平台,我发现的结果我不明白。

使用Dependency Walker我看到两个dll都会显示未装饰的“myFunc”。 虽然在Notepad ++中同时打开两个lib文件,但当x64仅显示“myFunc”时,Win32 lib显示“_myFunc”。

有人可以解释为什么lib签名不同吗?是否可以删除32位lib文件中的下划线?

+0

http://stackoverflow.com/a/15664100/17034 –

+0

那么我完全是新名字装饰,所以你的链接是有趣的汉斯。我做了一些进一步的研究,并在此页面上找到(https://en.wikipedia.org/wiki/Name_mangling),“Windows上的64位惯例(Microsoft C)没有引领下划线”。 –

回答

-1

签名是什么是,你不能(或不应该)用编辑器

的库是diferent改变它,因为一个为32位,另一个为64

Remenber一个DLL生成.lib但它只用于编译时使用,重要的部分是dll本身,你可以删除.lib文件执行.exe没有问题

+0

我不相信这真的会回答这个问题。 –

+0

你正在谈论.lib和.lib根本就没有mather,重要的部分是DLL,你看到,32位和64位都具有相同的签名,所以.exe不会因为使用而失败32或64位DLL。为什么botther关于它是不相关的东西? VS会为你链接它,也许下划线意味着其他优化选项和依赖于.lib的其他编译器选项 – Juan