Visual Studio 2017混合代码调试

原文链接地址:http://mp.weixin.qq.com/s/fI6KFArScIXG0Yy0akL7tg

Visual Studio 2017混合代码调试

2017-08-03   Simple学堂

1  引言

我们在做项目的时候,经常会遇到采用不同的语言编写不同的部分(如采用C/C++编写算法和性能要求较高的部分,而采用C#、VB.Net编写软件的界面),最后将不同的部分融合到一起,组成完整的软件。

当软件的不同部分组合到一起的时候,软件难免还有Bug,需要调试软件,排除Bug,已达到发行软件的要求。如果在调试过程中,无法达到源代码级的调试,将是非常费时费力的工作,并且工作效率要大打折扣。

VisualStudio IDE提供了在不同语言和委托代码、本地代码之间的源代码级调试功能。这里以Visual Studio 2017版为例进行说明。

2  在C#中调试C风格函数

首先,生成一个dll库,其中导出一个函数的原型如下:

 

#ifdefined(__cplusplus)

extern"C"

{

#endif

 

  int CDLL_API __stdcall Sum(int xint y);

 

#ifdefined(__cplusplus)

}

#endif

 

函数的实现如下:

int CDLL_API __stdcall Sum(int xint y)

{

  return (x + y);

}

在C#的调用端说明代码如下:

private const string _dllName = "cDll.dll";

       [DllImport(_dllName,CallingConvention = CallingConvention.StdCall)]

        public extern static int Sum(int x, int y);

调用代码如下:

int x =Sum(100, 200);

在C#项目属性的“调试”选项卡,勾选“启用本地代码调试”,如下图所示:


按F5建进行调试,如下图所示


        

单步调试进入源代码,如下图

         


备注:

上述过程包括两个工程,cDll工程为C++的工程,DllTest工程为C#的工程。

在cDll工程属性的后期生成事件中,添加如下命令:

xcopy $(TargetDir)*.dll  $(SolutionDir) /y

xcopy $(TargetDir)*.pdb $(SolutionDir) /y


在DllTest工程属性的生成事件页中,在后期生成事件命令行框中,添加如下命令:

xcopy $(SolutionDir)*.dll $(TargetDir) /y

xcopy $(SolutionDir)*.pdb $(TargetDir) /y


3  在C#中调试C++/CLI封装后的代码

在解决方案中添加ClrDll工程,如下图所示:


其中关键实现代码如下:

 

int ClrDll::ClrCls::Sum(int xint y)

{

  return (x + y);

}

 

double ClrDll::ClrCls::Multiply(double adouble b)

{

  return 2.0 * a * b;

}

在DLLTest工程中引用ClrDll工程,然后按照C#的方法,调用ClrDll工程中的类,如下图


OK,各位同学可以尽情的在源代码级调试你的C++/CLI代码吧!

4  小结

本文给出了在C#工程中调用C代码风格动态库,并进行源代码级调试的方法,以及C++/CLI风格组件的调试方法,有了上述方法后,我们就可以在C#中带C/C++代码进行调用和方便调试了。


阅读   3
1 投诉

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值