我在VS2005中用了一段代码:
        #include <atlbase.h>//在文件的顶部
        LPTSTR lpMem = (LPTSTR)::GlobalAlloc( GPTR, ::lstrlen( lpHtml )+1 );
::lstrcpy( lpMem, lpHtml );
CComPtr< IStream > spStream;
::CreateStreamOnHGlobal( lpMem, TRUE, &spStream );
这段代码的意思是创建一个字符流指针,“lpHtml”变量是LPTCSTR类型全局变量,编译通过了,但是运行就出错了,问题在CreateStreamOnHGlobal函数上,这段代码是放在
OnInitDialog函数里的,除了VS自动生成的代码没有其他代码。奇怪的是我用同样的方法同样的代码,在VC6中编译运行就没有任何问题,一切正常,请大家试一试,也请高手
帮助解决一下这个问题。

解决方案 »

  1.   

    我觉得首先要看lpHtml合法不合法
      

  2.   

    而且GPTR也不行,看看人家MSDN怎么说[in] The memory handle allocated by the GlobalAlloc function. The handle must be allocated as movable and nondiscardable. If the handle is shared between processes, it must also be allocated as shared. New handles should be allocated with a size of zero. If hGlobal is NULL, the CreateStreamOnHGlobal function internally allocates a new shared memory block of size zero. 
      

  3.   

    IStream *pIStream=NULL;
    ::CreateStreamOnHGlobal( lpMem, TRUE, &pIStream); 
      

  4.   

    楼上的朋友可能没有理解我的意思,我主要想表达的意思是,这段代码在VC6.0中调试没有问题,但是原封不动在VS2005中调试却出问题了,换一句话说:
    我用VC6.0新建工程,放上那段代码,调试运行没有问题,但是用2005打开这个工程在调试运行就出问题了。我希望大家如果有条件的话最好试一试,我
    次请大家帮忙了!
      

  5.   

    chehw:你提供的代码运行也是有错误的,你没有调试过么?
      

  6.   


    LPCTSTR lpHtml=TEXT("test");
            //vs 2005默认是unicode,下面一行造成分配的空间不够,改成如下便没问题
             //vc6.0的sizeof(TCHAR)等于一,所以没有问题。
    LPTSTR lpMem = (LPTSTR)::GlobalAlloc( GPTR, (::lstrlen( lpHtml )+1)*sizeof(TCHAR) ); 
    ::lstrcpy( lpMem, lpHtml ); 
    CComPtr < IStream > spStream; 
    ::CreateStreamOnHGlobal( lpMem, TRUE, &spStream );
      

  7.   

    CreateStreamOnHGlobal我试了,在2005和VC6均无问题。估计是楼主其他程序有问题,导致2005里在这里出问题了。楼主把全部程序贴上来。