Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

Visual studio 在VisualStudio中检测未对齐的链接 我最近完成了一个非常大的MFC/C++应用程序的初始端口,从Visual C++ 6到VS 2010。这个项目包括大约25个自定义DLL模块。大多数编译问题解决后,当调用其中一个相关的DLL方法时,我会在其中一个DLL模块中反复遇到运行时异常。在调试器中运行没有任何帮助,因为我只是在异常之后得到了一些废话:在破坏性调用之前可以访问的损坏的cstring等等。与2008年的效果相同。调试器和调用堆栈刚刚丢失。(这应该是一个线索)

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函数被调

经过几周的努力和进一步的调试,我最终对几个DLL的源代码进行了更多的检查,发现大约有20个头文件打开/关闭了字节对齐,如下所示:

#pragma pack(push,1) 

...
Some byte aligned structures
...
#pragma pack(pop,1)
再次阅读MSDN文档后,我意识到他们犯了一个错误,他们应该将第二个pragma改为
#pragma pack(pop)
,以恢复到以前的包装对齐方式。事实上,他们把字节对齐的包装留在了机器上

当一些DLL函数被调用时,DLL中的字节错位导致了地狱般的混乱。你无法想象当这神奇地解决了这个问题时会有什么解脱

现在回答我的问题:

  • 为什么这没有损坏旧版本VC++6中的链接?我可以 仅假设旧编译器有一个“功能”来防止这种情况发生 二进制的,静态的或动态的

  • 有没有一种方法可以通过编译器开关或其他方式检测到这一点。这是一个非常讨厌的bug,我也浪费了时间 花了很多时间找到它

  • 谢谢你能提供的任何建议