一个令人崩溃的问题

「已注销」 2011-05-14 08:56:49



void AAA(const BYTE *&pOutBuffer ,int &nOutLength);
void BBB(BYTE *&pOutBuffer ,int &nOutLength);


void f()
{
LPBYTE pBuffer = NULL;
int nLen = 0;

AAA(pBuffer,nLen);//在vc6下可行,在VC2008下不可行。(很古老的一段代码了,当年在VC6下很正常,移2008下就编不过了。)
BBB(pBuffer,nLen);//在VC2008可行。 //VC6下没测试。

}

有人知道原因吗?


...全文
96 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2011-05-14
  • 打赏
  • 举报
回复
LPBYTE就是BYTE*,VC6的检查比较松,允许只读和非只读指相互转换,2008则不允许将只读转换为非只读。
AAA要求的是一个只读指针的引用,这表示AAA可以通过该参数返回一个只读指针,而调用者提供的是非只读的指针变量,无论AAA是否返回只读指针,调用者都可以使用该变量修改其指向的数据,容易引发问题,所以不允许这样调用。
liutengfeigo 2011-05-14
  • 打赏
  • 举报
回复
请我吃顿饭吧,我就告诉你.
「已注销」 2011-05-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 m_tornado 的回复:]

vc6下类型检查不那么严格
按理说应该是warning啊
[/Quote]

VC6下当时的情况已经记不得了。现在也没有VC6,所以没测试,直接在2008上改了。
「已注销」 2011-05-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 healer_kx 的回复:]

问题不在这些代码上,我觉得令人崩溃的是你没给那些实现代码。
[/Quote]

注释都没看,白写了,哎!!!!!
m_tornado 2011-05-14
  • 打赏
  • 举报
回复
vc6下类型检查不那么严格
按理说应该是warning啊
healer_kx 2011-05-14
  • 打赏
  • 举报
回复
问题不在这些代码上,我觉得令人崩溃的是你没给那些实现代码。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧