Visual studio 在VisualStudio中检测未对齐的链接 我最近完成了一个非常大的MFC/C++应用程序的初始端口,从Visual C++ 6到VS 2010。这个项目包括大约25个自定义DLL模块。大多数编译问题解决后,当调用其中一个相关的DLL方法时,我会在其中一个DLL模块中反复遇到运行时异常。在调试器中运行没有任何帮助,因为我只是在异常之后得到了一些废话:在破坏性调用之前可以访问的损坏的cstring等等。与2008年的效果相同。调试器和调用堆栈刚刚丢失。(这应该是一个线索)
经过几周的努力和进一步的调试,我最终对几个DLL的源代码进行了更多的检查,发现大约有20个头文件打开/关闭了字节对齐,如下所示:Visual studio 在VisualStudio中检测未对齐的链接 我最近完成了一个非常大的MFC/C++应用程序的初始端口,从Visual C++ 6到VS 2010。这个项目包括大约25个自定义DLL模块。大多数编译问题解决后,当调用其中一个相关的DLL方法时,我会在其中一个DLL模块中反复遇到运行时异常。在调试器中运行没有任何帮助,因为我只是在异常之后得到了一些废话:在破坏性调用之前可以访问的损坏的cstring等等。与2008年的效果相同。调试器和调用堆栈刚刚丢失。(这应该是一个线索),visual-studio,visual-studio-2010,visual-studio-2008,visual-c++,mfc,Visual Studio,Visual Studio 2010,Visual Studio 2008,Visual C++,Mfc,经过几周的努力和进一步的调试,我最终对几个DLL的源代码进行了更多的检查,发现大约有20个头文件打开/关闭了字节对齐,如下所示: #pragma pack(push,1) ... Some byte aligned structures ... #pragma pack(pop,1) 再次阅读MSDN文档后,我意识到他们犯了一个错误,他们应该将第二个pragma改为#pragma pack(pop),以恢复到以前的包装对齐方式。事实上,他们把字节对齐的包装留在了机器上 当一些DLL函数被调
#pragma pack(push,1)
...
Some byte aligned structures
...
#pragma pack(pop,1)
再次阅读MSDN文档后,我意识到他们犯了一个错误,他们应该将第二个pragma改为#pragma pack(pop)
,以恢复到以前的包装对齐方式。事实上,他们把字节对齐的包装留在了机器上
当一些DLL函数被调用时,DLL中的字节错位导致了地狱般的混乱。你无法想象当这神奇地解决了这个问题时会有什么解脱
现在回答我的问题: