错误集合

1. 获取逻辑驱动器字符串:

BOOL CVoicePlayerDlg::GetLogicalDrives(HTREEITEM hParent)
{
 size_t szAllDriveStrings = GetLogicalDriveStrings(0,NULL);//返回需要的Buffer长度,包括了最后的NULL字符
 char *pDriveStrings = new char[szAllDriveStrings ];             //分配存放逻辑驱动器字符串空间
 size_t len = GetLogicalDriveStrings(szAllDriveStrings,pDriveStrings); //获取逻辑驱动器字符串
 size_t szDriveString = strlen(pDriveStrings); //获取第一个字符串的长度
//循环读取每一个驱动器字符串

 while(szDriveString > 0)
 {
  this->m_treelist.InsertItem(pDriveStrings,hParent);//将每一个驱动器字符串插入树形节点下
  pDriveStrings += szDriveString + 1; //移动指针,每次移动的长度等于字符串有效长度加上NULL所占字节数
  szDriveString = strlen(pDriveStrings); //获取下一个字串长度
 }
 return true;
}

实验截图:

程序分配了13个字节的空间,然后将逻辑驱动器字符串分别存入分配的空间内,每一个字符串以NULL结尾,总共有3个驱动器字符串,占用12个字节。在最后还有一个NULL字节用来表示结束。

 2. 在MFC编程中可以在对话框类的OnInitDialog()函数中初始化相关成员变量和一些前期的准备工作;同时添加消息响应函数OnClose()中做清理工作。

3. 在一个进程中创建了另一个进程,如果想在父进程中手动结束子进程,则在创建子进程结束后不要关闭子进程句柄,否则会出错。

4. 有malloc 就一定有free, MFC的类成员变量最好都在OnInitDlalog()函数里初始化,而不要在其它某个函数里初始化。一些成员变量在使用前得先检查是否有合法的值,否则程序会在某些情况下意外崩溃。

5. CString的TrimLeft和TrimRightf方法可以去掉字符串左右两边指定的字符或字符串或者空格。

6. MFC程序也可以传参数,但是它和console程序不同,举个例子,假如给console程序传某个文件的路径参数,你可能需要加引号将路径参数括起来,但是mfc不需要。mfc获取参数的方法:

CString strCmdLine = AfxGetApp()->m_lpCmdLine;//传入的参数如果加了引号的话,这里获得的字符串也会含有引号

7. MFC程序可以修改编译方式,如最快速度、最小大小、默认等。产生的可执行程序也有些许差异。

8. 函数指针:假如有一个DLL,知道其某个函数的偏移(相对加载的基址),不是导出函数,怎么才能使用该函数呢?

假设已知道该函数的原型为 int ***func(int,int);偏移为0x0a0b;

①定义一个函数指针 typedef int (__stdcall *Func)(int, int);

②HADLE hModule = LoadLibrary("*****.dll");

③Func MyFunc = (Func)(hModule + ox0a0b);

④调用MyFunc(int a, int b);

如果该函数是导出函数,那就更好办,直接用GetProcAddress,把返回的值赋给定义的函数指针变量就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值