将32位.def文件转换为64位
在我公司,我们使用.def
文件来指定需要导出的符号。 (我希望我可以使用更现代化的自动化技术,不幸的是,那些决定在八十年代生活的人)。将32位.def文件转换为64位
手动编写.def
文件,使用手动复制粘贴是无聊和容易出错,但到目前为止,我可以忍受它。
但是,我需要为64位版本的DLL编写类似的.def
文件。几个函数的名称修饰发生了变化,我想知道是否有办法从32位版本生成64位版本的.def
文件。
您知道有任何可以帮到您的工具吗?这是否现实?我真的不觉得我想再一次手动做它。任何解决方案,甚至包括编码我自己的工具的解决方案都是受欢迎的
谢谢。
我可能会__declspec(dllexport)我想要的符号,编译,然后在生成的DLL上运行dumpbin/exports来获取重名的名称,然后您可以删除__declspec并生成一个.def文件。
告诉你的老板回到80年代。严重的是,这不是导出符号名称的便携方式。如果C++编译器更改名称修改方案会怎样?然后你必须重新做这个(jcopenha说的)。如果你不在那里工作会发生什么?另一个可怜的灵魂将不得不花费宝贵的时间来了解什么以及如何去做?我会尽量说服老板使用__declspec(dllexport)
。它现在可以节省时间,并可能在未来的时间。
我假设你正在导出类和重载函数。如果你不是,那么我会用C名字来导出函数。这些名字不会被破坏,也不会改变。
我确实在出口类。他们希望使用'.def'文件来“隐藏”函数名称,并使用序数代替(以防止用户猜测导出哪些函数......)我相信这是一个可怕的原因,它不会阻止任何天才“黑客”找到功能签名。 – ereOn 2011-01-05 19:08:16
哎。那么,我会尝试在构建过程中自动化它。创建一个使用__declspec()的单独构建解决方案(隐藏在一个在常规构建中无法展开的宏中)。在输出上运行dumpbin,并根据dumpbin结果创建一个.def文件,并将其合并到项目中。这样它就相当自动化了,如果你切换到不同的编译器就不会炸掉。你只需要记住使用宏。 – 2011-01-05 20:03:24
我不明白关于引入DEF文件问题的名称修改方案更改的评论背后的推理。我认为DEF文件是一种避免命名重写更改问题的方法,因为当您使用dllexport时,会得到重名的名称,但是当您使用DEF文件时,您可以指定名称,并且它们会进入未被重定向的出口我的经验。 – BlueMonkMN 2017-05-03 15:38:51
嘿,我还活着回到80年代呢! – 2011-01-05 16:47:24