如何实现VB和VC的联合调试

原创 2005年05月25日 21:53:00
我经常会遇到这种情况:
 
我用VC写了一个DLL,然后用VB写EXE。
我现在想调试我的DLL和EXE,在VB环境下调试,可是我无法跳入DLL函数的内部,无法在DLL内部调试。
有没有一个办法能让我实现VB和VC联调,当我在VB环境中需要跳入DLL函数时,进入VC环境,在VC中调试,这样我就可以查看变量值、设置断点,然后等函数返回时又回到VB环境下继续调试。
 
后来经过我自己的一番摸索,终于实现了VB、VC联调。
 
这个方法是以VC为主环境,VB为副环境,这是因为DLL是由VC编写的,而在调试DLL的时候一般会让我们指定一个EXE。如果DLL是VB编写的,我想应该是以VB为主环境(没有测试过)。
 
1.  建立一个VB Standard EXE工程project1.vbp,在这个工程中调用VC编写的动态连接库中的函数。
2.  建立一个VC DLL工程TestDll,编写代码实现函数输出。建议把整个工程目录放置到project1.vbp所在的目录。
3.  设置VC工程,这一步是非常重要的,是实现联调的关键。
a)         更改General选项卡中OutPut Files的路径,指定到project1.vbp所在的目录。由于我把工程目录放在了project1.vbp目录下,因此我这里用相对路径“../”(其实就是project1.vbp所在的目录)。
b)        更改Debug选项卡中Executable for debug session:为你电脑中VB6.exe;更改Working directory为project1.vbp所在的目录;在Program arguments:中填写project1.vbp,这个参数其实是传给VB的,让VB打开project1.vbp,如果增加参数”/r”,那么在VB启动后立即开始(相当于按F5),如果不增加参数”/r”,那么需要手动开始。
c)        确认你的Link选项卡中输出DLL的路径及DLL名称,把他设定到project1.vbp所在的目录:
4.  在你的DLL源程序(VC中)中设定断点,按F5, GO!怎么样,VB环境已经运行起来了,工程project1.vbp已经打开了吧!如果你在3)b.的Program arguments:中指定了”/r”参数,那么这个时候程序已经开始运行了,如果你没有指定这个参数,那么你可以先在VB环境中设定断点,然后在调用DLL函数上设置断点,按F5,Start!如果在VB中遇到断点,程序就会停下,然后按F8,Step into! 发现什么了,哈哈,VC环境主动切换到前面,而且当前的箭头已经指向了被调用函数了,这个时候,已经进入VC环境了,你想怎么调试都可以!当被调用函数要结束时,请按F11,Step Out,否则会有一段汇编代码。这个时候VB环境有主动切换到前面,又进入VB调试环境了!
 
在用VC编写DLL时要注意,VC会对输出函数名进行一些修饰,所以还是需要在def文件中明确输出函数名。这个方法对于其他的环境之间(如Delphi-VC、Delphi-VB)是否适用我还没有测试过,请大家在需要时自己测试。

VB/VC混编调试之——VS调试VB6程序,解决VB6的IDE缺陷

VB6的IDE调试虽方便,但是缺陷也很多,代码位于同一进程,容易因异常导致IDE崩溃、无法多线程调试、窗口子类化后进入中断模式会导致IDE无响应。难道调试要用OD来反汇编吗?不仅对调试者的门槛要求高,...
  • zt1037431656
  • zt1037431656
  • 2017年09月30日 23:21
  • 128

vc下dll调试

       http://blog.csdn.net/coding_hello/archive/2008/11/24/3364111.aspx         很多初学DLL和COM编程的人都为DL...
  • zhoubl668
  • zhoubl668
  • 2009年01月08日 09:06
  • 8727

Vb 与 Vc 的区别

一:简单的对比 VB是由Basic语言演化而来的VisualBasic,意思是可视化Basic,而VC是由C++语言演化而来的VisualC++,意思是可视化C++,VB功能没有VC强大,但是很容易...
  • guomutian911
  • guomutian911
  • 2014年10月21日 11:57
  • 2703

vc和vb区别

VB的核心语言是Basc语言,VC的核语言是C++语言.VB是一种解释型语言,需要VB的一个运行库来支持解释执行VB程序的.VC是一种编译型语言,源代码要经过编译器编译成exe可执行文件才能执行.  ...
  • q727668704
  • q727668704
  • 2015年07月07日 14:59
  • 1782

matlab与vs(c++)联合调试

matlab与vs(c++)联合调试 matlab的强项是矩阵运算,但是在计算循环时比较耗时。mex功能提供一定的接口函数规范,可以使得matlab和vc++进行有效的混合编程。尤其是当进行复杂的数学...
  • lcb_coconut
  • lcb_coconut
  • 2016年12月26日 17:19
  • 1136

精通VC与MATLAB联合编程——综合举例二

 作者:邓科 本文使用的工具:VC6.0+MATLAB6.5  在本章中实现的是在VC中调用MATLAB神经网络工具箱,文章中用到的程序是一篇硕士论文的一部分,因此没有提供源程序,目的是通过这个例子介...
  • zhaodengzhong
  • zhaodengzhong
  • 2008年03月26日 23:39
  • 1560

keil uvision4和proteus联合调试

Kile uvision4分为 for 51 和for arm两个版本,分别有51单片机的库和
  • lieyanhaipo
  • lieyanhaipo
  • 2014年04月19日 18:36
  • 2272

VB程序的调试

3.VB程序的调试 由于VB会把程序编译成解释型(http://zh.wikipedia.org/wiki/VB_%E4%BC%AA%E4%BB%A3%E7%A0%81)或者P-Code(http:...
  • penjie0418
  • penjie0418
  • 2012年03月05日 09:32
  • 741

VB与VC通信初探(一)

     在使用VB调用VC写的DLL的时候,可以实现一些VB不能实现或者很难实现的功能,但是,因为VB与VC之间的数据类型并不总是完全对应的,所以,在进行参数传递的时候,就需要进行类型转换了。下面我...
  • eliner
  • eliner
  • 2004年04月22日 14:49
  • 1598

VC与VB数据类型对应关系

VB调用C DLL时的参数传递函数在C中的原型,参数类型和传递方式 对应关系 C DLL 原型         VB声明                 VB调用 USHORT a         B...
  • lonet
  • lonet
  • 2008年09月03日 11:14
  • 8165
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何实现VB和VC的联合调试
举报原因:
原因补充:

(最多只允许输入30个字)