VC++6.0使用技巧

1.如何在VC中使用自定义资源?
(1)创建一个基于对话框的应用程序,设置工程名称为“CustomResource”。
(2)选择资源视图页面,在右键菜单中选择Insert命令,在弹出的插入资源对话框中单击“Custom”按钮,选择一个文本文件。如图1所示。
(3)在设置了资源文件的类型和名称后,资源视图如图示所示。
(4)在窗体资源设计器中添加一个多行文本的文本编辑控件,设置关联变量为m_memo。
(5)添加一个成员方法,用来读取资源文件,并将资源文件的内容显示在m_memo变量所关联的文本编辑控件中。实现代码如下:
void CCustomResourceDlg::LoadCustomResource()
{
      //查找我们所需要的资源
      HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCE(IDR_TXTREADME), TEXT("TXT"));
      //获取资源的大小
      DWORD dwSize = SizeofResource(NULL, hRsrc);
      //加载资源
      HGLOBAL hGlobal = ::LoadResource(NULL, hRsrc);
      //锁定资源
      LPVOID pBuffer = LockResource(hGlobal);
      m_memo = (char *)pBuffer;
      UpdateData(FALSE);
}
(6)在OnInitDialog方法中调用LoadCustomResource方法完成资源文件的读取。


2.VC调试宏的应用
在调试时可以使用TRACE宏将字符串输出到编译器的输出窗口中,这样就可以在程序运行时将任何一种数据类型以字符串的形式输出。通过对该宏的定义可以看到,其实就是调用了一个名为AfxTrace的方法,定义代码如下:
void AFX_CDECL AfxTrace(LPCTSTR lpszFormat, ...);
#define TRACE              ::AfxTrace
通过对源代码的分析可以看出,这一功能就是将输出的字符串通过afxDump所指向的类进行输出。实现代码如下:
void AFX_CDECL AfxTrace(LPCTSTR lpszFormat, ...)
{
#ifdef _DEBUG // all AfxTrace output is controlled by afxTraceEnabled
      if (!afxTraceEnabled)
            return;
#endif
      va_list args;
      va_start(args, lpszFormat);
      int nBuf;
      TCHAR szBuffer[512];
      nBuf = _vsntprintf(szBuffer, _countof(szBuffer), lpszFormat, args);
      ASSERT(nBuf >= 0);
      if ((afxTraceFlags & traceMultiApp) && (AfxGetApp() != NULL))
            afxDump << AfxGetApp()->m_pszExeName << ": ";
      afxDump << szBuffer;
      va_end(args);
}
#endif //_DEBUG
下面通过一段代码学习这个宏的应用,代码如下:
      int count =100;
      CString str("数量:");
      TRACE("%s%d\n",str,count);


3.如何调试Windows外壳扩展程序
Windows处壳扩展程序与普通过DLL程序调试方法不同。需要在Visual C++编辑器中设置资源管理器的路径,并临时终止外壳程序的运行。具体操作步骤如下:
(1)启动外壳扩展的工程,选择Project菜单下的Settings命令,打开工程设置对话框,在Degug标签页中的Executable for debug session文本编辑框中输入资源管理器程序的路径。如图1所示。
(2)选择系统的“开始”菜单,选择“关机”命令,但不单击“关机”按钮,而是单击“取消”按钮。此时外壳程序将被终止。
(3)进入外壳扩展程序的调试,对自己编写的程序进行调试即可。
(4)结束调试后,按下CTRL+ALT+DEL组合键,选择“任务管理器”按钮,弹出任务管理器对话框,在“文件”菜单选中“新任务/运行…..”菜单项,然后输入资源管理器程序(Explorer.exe)的路径即可恢复。


4.在循环中使用断点
通常在编辑程序时都需要使用一段循环来处理特定的功能,但问题就出现了。由于通常循环的次数都非常多,这时进行调试就会变的非常麻烦。因为断点通常都是使用手动的方式进行执行的,而一个循环体可能需要上百次或上千次的循环执行,这样手动调试就会出现问题。所以可以使用高级断点功能对断点进行设置,使断点可以在指定的条件下执行。操作步骤如下:
(1)创建一个基于对话框的工程,在“确定”按钮中编写如下代码:
void CDebugDlg::OnOK()
{
      int aa[120];
      for (int i = 0 ; i < 120 ; i++)
      {
            aa[i] = i;
      }
      CDialog::OnOK();
}
(2)将光标定位在循环体中aa[i]= i这一行,选择Edit菜单中的BreakPoints命令,打开断点设置对话框,如图1所示。
(3)在Location标签页中Break at文本框后的按钮中单击并选择line命令,在当前行添加断点。如图2所示。
(4)选中添加的断点单击Condition按钮,弹出Breakpoint condition对话框,在此对话框中的Enter the number of times to skip before stopping文本编辑框中输入110作为循环的步长值。如图3所示。
(5)运行程序进入调式状态,在断点处停止。此时变量i的值为110。利用这一功能就可以快速的调式循环程序。
 
5.在工程中添加CPP文件
使用MFC向导在工程中添加新类时,会自动创建类的.h文件和.cpp文件。程序设计人员也不需要进行任何的处理,但如果只想添加一些函数,就需要手动添加.h文件和.cpp文件。这时就需要对.cpp文件进行处理,否则编译器就会出现编译错误。操作步骤如下:
(1)新建一个工程,命名为CPP。
(2)选择File菜单中的New命令,打开New对话框,选择Files标签页。选择C++ Source File项,输入文件名Public,如图1所示。
(3)编译工程,在输出窗口中显示unexpected end of file while looking for precompiled header directive错误信息。
(4)在Public文件的头部添加#include "stdafx.h"头文件,再进行编译。


6.如何调试DLL文件

DLL文件是一种特殊的可执行文件,该文件的运行不会创建独立的进程空间,而是依附于运行此动态库的应用程序的进程中运行。所以动态库的调试和应用程序的调试也是不一样的。DLL文件的调试步骤如下:
(1)创建一个基于MFC的动态连接库程序,设置工程名称为TextDll。如图1所示。
(2)在动态库中添加求两数之和的程序,代码如下:
extern "C" __declspec(dllexport) int AddInt(int var1,int var2)
{
      return var1 + var2;
}
(3)新建一个基于对话框的工程,设置工程名称为textDemo。如图2所示。
(4)在对话框按钮的单击事件中添加如下代码:
void CTextDemoDlg::OnOK()
{
      typedef  int (*AddInt)(int var1,int var2);                                         //定义函数指针
      AddInt _AddInt;                                                                            //定义指针类型变量
      HINSTANCE hInstLibrary = LoadLibrary("TextDll.dll");                   //载入DLL
      _AddInt = (AddInt)GetProcAddress(hInstLibrary, "AddInt");             //获取函数指针
      UpdateData();                                                                            //更新数据到变量
      int sum = _AddInt(atoi(m_one),atoi(m_two));                                  //执行函数计算两数之和
      m_value.Format("%d",sum);                                                          //将整型转成字符串
      UpdateData(false);                                                                        
      FreeLibrary(hInstLibrary);                                                              //卸载DLL
}
(5)调试DLL工程时在代码中设置断点,然后进入调试状态,这时会弹出一个Executable For Debug Session对话框,在Executable file name文本框图中输入调用DLL的可执行文件的路径。这样就可以像调试应用程序一样调试DLL工程了。如图3所示。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值