`
yidongkaifa
  • 浏览: 4064130 次
文章分类
社区版块
存档分类
最新评论

都是visual studio 2010 BUG惹的祸

 
阅读更多

  这两天项目在用C#调用C++编写的一些库时遇到一个很头痛的问题,用C++对DLL进行测试没有任何问题,可用C#进行调用时居然所有输出参数均未被改变,也就是输出没有任何输出,但返回值是正确的。同事调了两天,曾怀疑是函数调用约定问题,于是不断地在__cdecl和__stdcall的各种组合方式进行尝试,虽然明知道windows DLL使用的是__stdcall,但的确经过测试它不管用;后来实在不行,又创建了两个工程,写了几个简单的函数,再用C#调,却没有任何问题,而我们的工作代码却调用不成功;后来我还曾怀疑可能是inline函数的优化造成的问题,因为在DLL中导出的函数是__stdcall的,但接口函数里面只调用了一个函数,用的却是__cdec,有可能如果把导出函数直接替换成内层的函数,可能调用约定不正确(当然,这在理论上也不应成立的),于是关掉了编译器对inline函数的优化,依然无效。

  今天快要下班的时候也闲下来了,我就开始处理这个问题,于时就尝试在C++的接口函数里添加断点,看C++函数是否正确执行并正常返回,于是启用了C#工程Debugging中的“Enable unmanaged code debugging”选项,奇迹发生了,C++代码的断点触发了,函数正常执行并返回,并且原来与C#的输出接口也正常了,数据被正常导出到C#代码中。难道是这个选项解决的问题?想想是不应该的,这个只是调试优化选项,而且创建的其它的测试工程也不需要启用这项的。于是又取消该项,再测,果然恢复原来错误的状态;然后,我又从DEBUG配置切换到Release配置,存在着同样的问题,只有启用了“Enable unmanaged code debugging”程序才能正常运行。问题解决了,但是肯定不是正解,启用的选项中是启用对C++代码的调试功能的支持,不应该影响程序的正常执行,这应该是Visual Studio或CLR的一个BUG引起的。

  在重构过程中还遇到一个有意思的问题:同事起的工程的名字不伦不类的,我给改了个名字security,于是生成security.dll,出现了一个奇怪的问题,明明我编译的DLL中导出了我要的函数,在C#中即怎么也找不到指定的函数,后来我把DllImport的DLL文件的参数使用绝对路径,问题就消失了,肯定是在DLL的搜索过程中先找到了一个security.dll,这里用的是那个文件而不是我的文件,所以没有找到我要的函数,再改个名就好了。在给动态链接库起名字的时候越规范、越标准越好,但随时都要注意别跟其它的系统文件重名了,否则就会出现这些“奇怪”的问题。

分享到:
评论

相关推荐

    visual studio 的bug

    visual studio 的bug

    visual studio 2008 bug

    visual studio 2008 bug

    Visual Studio 2010 Help Downloader Plus v2.0.0.7

    软件名称: Visual Studio 2010 Help Downloader Plus 原 名 称: Visual Studio 2010 Help Downloader 原 官 网: http://vshelpdownloader.codeplex.com/ (已失效) 软件版本: 2.0.0.7 基础版本: 1.0.0.3 Beta ...

    使用Visual.Studio.2010进行软件测试

    中文名: 使用Visual.Studio.2010进行软件测试 原名: Software Testing with Visual Studio 2010 作者: Jeff Levinson 资源格式: PDF 版本: 英文文字版 出版社: Addison Wesley书号: 9780321734488发行时间: 2011年03...

    Visual Studio Help Downloader Plus v5.0.1.0

    1、增加对dev10(Visual Studio 2010)版本的支持,至此“Visual Studio Help Downloader Plus”支持Visual Studio 2010以及其后所有已发布的版本,理论上也支持Visual Studio未来版本的支持,为庆祝此跨越,特将版本...

    Visual Studio Help Downloader Plus v5.0.0.0

    1、增加对dev10(Visual Studio 2010)版本的支持,至此“Visual Studio Help Downloader Plus”支持Visual Studio 2010以及其后所有已发布的版本,理论上也支持Visual Studio未来版本的支持,为庆祝此跨越,特将版本...

    Visual Studio 自编计算器

    经过五天的修改和完善,所写计算器满足基本计算需求,近乎无bug。文本框只能输入数字或科学计数法;能够键盘输入但是不能后撤(功能可以实现但是会卡顿,暂未修复,所以并未添加此功能);用的VS传统界面,可能比较...

    Visual Studio 遇到了异常,这可能是由某个扩展导致的

    只要在VS2010源码编辑器中输入一个字符,它就报道错误了 "visual studio 2010 遇到了异常,可能是由某个扩展导致的......"。刚开始一看,以为是扩展引起的,那我就把vs中所有的扩展暂时禁用一下,结果bug还是依旧。...

    Visual Studio 2010 Tools for Office Runtime 10.0.40303.0

    MS官网上的 VSTO office runtime是10.0.6的,但是在XP环境下是有bug的,无法运行。因此要使用旧版本的runtime来解决这一问题。楼主在开发Excel插件时需要使用到该工具。

    BEGINNING C# 7 Programming with Visual Studio 2017.zip

    新版的《C#入门经典(第8版)》由三位专家联袂撰写,浓墨重彩地描述使用C# 7和Visual Studio 2017编写程序的基础知识,是编程新手的终极指南,不要求读者具有任何编程经验。书中讲述变量、流程控制、面向对象编程、Web...

    Visual Studio Help Downloader Plus v3.0.0.3

    14、修复dev14(Visual Studio 2015)加载语言时挂死(该bug由“远景论坛”的“铁浪”提交,在此表示感谢), 修改为默认加载"en-us"语言,如果没有该语言则显示提供的第一种语言; 2015.08.15日更新内容 15、增加在...

    Visual Studio Code v1.14.0

    Visual Studio Code 官方最新版本 v1.14.0,新增诸多实用特性,修复许多bug。

    Visual Studio 未能加载文件或程序集解决方案

    Visual Studio 在编译C#时未能加载文件或程序集解决方案, 您一定可以通过它来解决这个问题!

    Visual Studio的 诡异bug(mscorlib无法引用)

    NULL 博文链接:https://gstarwd.iteye.com/blog/561828

    《Visual Studio .NET使用技巧手册》精选版

    Visual Studio .NET使用技巧手册 作者 Minh T. Nguyen Visual Studio .NET是微软推出的功能最丰富,扩展性最强的编程工具。VS.NET中的功能与快捷方式不计其数,并且在每一个版本中都会明显增加。不熟悉这些节省时间...

    Microsoft Visual C++ 2015 Redistributable Update 3 RC

    有关已修复的 Bug 和已知问题列表,请参阅 Visual Studio 2015 Update 3 RC MSDN 文章。 支持的操作系统 Windows 7 Service Pack 1, Windows 8, Windows 8.1, Windows Server 2003 Service Pack 2, Windows ...

    visual studio 2017全透明主题_目前最完整的无bug版本 放心食用

    如果不懂如何设置的可以类比网上的vs透明主题(推荐MoeIDE而不是Claudia ) 本人只修改了environment 和 searchcontrol 以及 ...其余未做修改,如果bug可以反馈哟 反正我目前是还没遇到 更改字体和字体颜色食用效果更佳

    QT+Visual Studio 2019 的节目登记(含报告)

    基于 QT+Visual Studio 2019 的节目登记(UI用户界面) 节目报名包括并不限于如下... QT+Visual Studio 2019打开时会显示bug,不是真的有bug,是Visual Studio 2019和QT兼容性的问题导致检测bug迟钝。 运行不会有bug

    Visual Studio 版本转换器(测试版)

    随便写的小程序,只是对于多个批量更改比较方便,里面尚有BUG望指点,包涵!

Global site tag (gtag.js) - Google Analytics