炫彩界面库论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4881|回复: 14

XImage_LoadMemory()如何使用

[复制链接]

该用户从未签到

发表于 2015-11-20 20:50:42 | 显示全部楼层 |阅读模式
    //分配全局存储空间
    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
    LPVOID pvData = NULL;
    if (hGlobal == NULL)
        return E_FAIL;
    if ((pvData = GlobalLock(hGlobal)) == NULL)//锁定分配内存块
        return E_FAIL;
    //把文件读入内存缓冲区
    dwByteRead = httpFile->Read(pvData,dwFileSize);
    GlobalUnlock(hGlobal);


    CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);
    //装入图形文件
    bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);
    if(FAILED(bResult))
        return E_FAIL;

    HXCGUI m_hPic = XShapePic_Create(10,200,250,150,m_hEle);

    XShapePic_SetImage(m_hPic,XImage_LoadMemory(pvData,dwFileSize,FALSE));


我一运行就报错,这是为什么呢

该用户从未签到

发表于 2015-11-20 21:05:14 | 显示全部楼层
调试一下,
XShapePic_SetImage(m_hPic,XImage_LoadMemory(pvData,dwFileSize,FALSE));
此时 pvdata 是否有效,和dwfilesize是否大小正确。
pvData,dwFileSize

看你的代码,你 在读取这段内存之前,就使用了 GlobalUnlock(hGlobal);,,,你把这个函数放到

XShapePic_SetImage(m_hPic,XImage_LoadMemory(pvData,dwFileSize,FALSE)); 之后看看?

该用户从未签到

 楼主| 发表于 2015-11-20 21:42:25 | 显示全部楼层
还是不行,有断点

    //分配全局存储空间
    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
    LPVOID pvData = NULL;
    if (hGlobal == NULL)
        return E_FAIL;
    if ((pvData = GlobalLock(hGlobal)) == NULL)//锁定分配内存块
        return E_FAIL;
    //把文件读入内存缓冲区
    dwByteRead = httpFile->Read(pvData,dwFileSize);

                  HXCGUI m_hPic = XShapePic_Create(10,200,250,150,m_hEle);

    XShapePic_SetImage(m_hPic,XImage_LoadMemory(pvData,dwFileSize,FALSE));

        GlobalUnlock(hGlobal);

该用户从未签到

发表于 2015-11-20 21:49:53 | 显示全部楼层
许你一世柔情 发表于 2015-11-20 21:42
还是不行,有断点

    //分配全局存储空间

爆神马错误,细心检查,看这个我看不出来是哪里的问题

该用户从未签到

 楼主| 发表于 2015-11-20 22:27:07 | 显示全部楼层
HIMAGE m_hIm = XImage_LoadMemory(m_pBMPBuffer,dwFileSize+1,FALSE);

我一调用这个函数就报错,错误是:Invalid address specified to RtlFreeHeap( 02340000, 00736D60 )

该用户从未签到

 楼主| 发表于 2015-11-20 22:34:14 | 显示全部楼层
你们有关于这个XImage_LoadMemory()范例吗

该用户从未签到

 楼主| 发表于 2015-11-20 22:54:52 | 显示全部楼层
        CFile af;

        af.Open("d:\\a.png", CFile::modeReadWrite);

        char* buf = new char[af.GetLength()];

        DWORD dw = af.Read(buf,af.GetLength());


        af.Close();

       

        HXCGUI m_hPic = XShapePic_Create(10,200,250,150,m_hEle);

        HIMAGE m_hIm = XImage_LoadMemory(buf,af.GetLength(),FALSE);

XImage_LoadMemory()一调用这个函数,立马报内存错误,屏蔽调这个函数,查看字符数组还有大小,都是和图片文件一致的

该用户从未签到

发表于 2015-11-20 23:21:20 | 显示全部楼层
许你一世柔情 发表于 2015-11-20 22:34
你们有关于这个XImage_LoadMemory()范例吗

易语言中调用是正确的。正在查看是怎么回事。。。

该用户从未签到

 楼主| 发表于 2015-11-20 23:23:16 | 显示全部楼层
行,好的,谢谢版主,帮忙看下vc6.0的 XImage_LoadMemory(),能给个范例参考下看看

该用户从未签到

发表于 2015-11-21 00:34:19 | 显示全部楼层
许你一世柔情 发表于 2015-11-20 23:23
行,好的,谢谢版主,帮忙看下vc6.0的 XImage_LoadMemory(),能给个范例参考下看看 ...

经过测试一下,
int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine, int nCmdShow)
{
    XInitXCGUI(); //初始化
    hWindow=XWnd_Create(0,0,300,200,L"炫彩界面库-窗口");//创建窗口
    if(hWindow)
    {

                HELE hEle = XEle_Create(0,0,100,100,hWindow);

                std::ifstream ifsm("1.jpg",std::ios::binary|std::ios::in);
                ifsm.seekg(0,std::ios::end);
                int fileSize =ifsm.tellg();
                char buffer[1574] = {0};
//                char* buffer = new char[fileSize];

                ifsm.seekg(0,std::ios::beg);
                ifsm.read(buffer,fileSize);
                ifsm.close();

                HIMAGE hImage = XImage_LoadMemory((void*)buffer,fileSize,TRUE);

                XEle_AddBkImage(hEle,hImage);


        XWnd_ShowWindow(hWindow,SW_SHOW);//显示窗口
        XRunXCGUI(); //运行
    }
    XExitXCGUI(); //释放资源
    return 0;
}
这种方式在release下面是可以运行的,,具体原因还在查找。。。。调用方式是正确的。。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

QQ|Archiver|手机版|小黑屋|炫彩界面库 ( 鄂ICP备2023014763号-1 )

GMT+8, 2024-9-19 09:39 , Processed in 0.071503 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表