我希望使用托管代码在非托管 C++ DLL 上 LoadLibrary,然后对已损坏的外部函数调用 GetProcAddress。我的问题是,从 C++ 编译器获得的损坏名称是确定性的吗?那是:如果原始签名未更改,名称是否总是会转换为相同的损坏名称?

有帮助吗?

解决方案

它不是由标准指定的,并且根据我的经验,在同一编译器的版本之间肯定会发生变化,尽管它必须在某些固定的情况下具有确定性,因为否则将无法链接两个单独编译的模块。

如果您正在使用 GetProcAddress, ,将函数导出为会更清晰 extern "C" 所以他们的名字不会被破坏。

其他提示

是特定的编译器,因为其他人说过。但是,您可以通过AGNER FOG查找文档中的详细信息...

http://www.agner.org/optimize/# manuals

请参阅该页面上的第5项。

此外,这些天,有可以为您处理常用编译器的漫画和脱摩尔。对于Visual C ++,起点将是DBGHELP和ImageHLP库。

http://msdn.microsoft.com / en-US / Library / MS679292%28V= VS.85%29.aspx

http://msdn.microsoft.com / en-US / Library / MS680321%28V= VS.85%29.aspx

名称曼吉尔通过每个编译器(可能与否 - 没有标准)不同地处理。如果在C ++代码中使用纯C函数,则可以使用extern“c”来对C函数的纯粹名称进行Smageling,因此编译器能够找到它们。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top