硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2568|回复: 6
收起左侧

[emWin] GUI_ALLOC_h2p:illegal argument (0 handle) in GUI_ALLOC_h2p()

[复制链接]

17

主题

42

回帖

17

积分

初级会员

积分
17
发表于 2017-7-6 14:33:41 | 显示全部楼层 |阅读模式
请问我在while循环中对图形控件的数据对象添加新值,为什么会报错?
错误提示为:GUI_ALLOC_h2p:illegal argument (0 handle) in GUI_ALLOC_h2p()

赋值代码如下:

void MainTask(void)
{
    WM_HWIN  hWin;
    int  i;
    GUI_Init();

    WM_EnableMemdev(WM_HBKWIN);
    WM_SetCallback(WM_HBKWIN, _cbWin);
    WM_SetCreateFlags(WM_CF_MEMDEV);

    while(1)
    {
        GRAPH_DATA_YT_AddValue(ahData,6);                       //固定赋值
        GUI_Exec();
    }
}

但把这条赋值语句放到初始化代码中就不会报错误。

但我看例程中也是这么做的啊。

网上查了下该故障的发生原因,基本上都所是“因为使用了内存设备,把内存设备取消就行了。或者 把 GUI_ALLOC_SIZE 大小设置大些!


但我试了取消内存设备(注释掉绿底部分代码),问题还是存在。另未找到GUI_ALLOC_SIZE是在哪里设置,未做试验,不知是否有效。


各位有碰到这种问题么?帮忙分析下是什么原因造成的。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-7-6 14:40:01 | 显示全部楼层
发完整测试代码。
回复

使用道具 举报

17

主题

42

回帖

17

积分

初级会员

积分
17
 楼主| 发表于 2017-7-6 16:05:35 | 显示全部楼层
刚把这块拿出来,发现单独建一个窗口没问题,但把它作为其它窗口的子窗口时就会报这个故障。

代码太多,没法贴代码啊。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-7-7 01:44:35 | 显示全部楼层

回 quickout02 的帖子

quickout02:刚把这块拿出来,发现单独建一个窗口没问题,但把它作为其它窗口的子窗口时就会报这个故障。

代码太多,没法贴代码啊。 (2017-07-06 16:05) 
仅看你提供的代码,无法查看到实际问题。
回复

使用道具 举报

11

主题

68

回帖

198

积分

初级会员

积分
198
发表于 2017-7-7 09:34:22 | 显示全部楼层
你这个GUI_ALLOC_h2p             (GUI_HMEM  hMem);貌似是有形参的,没正确调用形参,argument (0 handle)
回复

使用道具 举报

17

主题

42

回帖

17

积分

初级会员

积分
17
 楼主| 发表于 2017-7-7 09:39:24 | 显示全部楼层
问题找到了,是因为该语句GRAPH_DATA_YT_AddValue(ahData,6);  必须要确保句柄存在,所以需加一个判断条件,如:
if(hWin)  GRAPH_DATA_YT_AddValue(ahData,6);   这样就没问题了。

注意:点击窗口关闭按钮是窗口会被删除,但该窗口的句柄(如果该句柄为全局变量)的值还是存在,不会被同步清零。这时如果有地方对该句柄进行操作则会产生错误,所以最好时在关闭窗口时将全局变量的句柄也同步清零,同时在对该句柄进行操作的代码前加上该句柄不为0的判断条件。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-7-8 00:58:31 | 显示全部楼层

回 quickout02 的帖子

quickout02:问题找到了,是因为该语句GRAPH_DATA_YT_AddValue(ahData,6);  必须要确保句柄存在,所以需加一个判断条件,如:
if(hWin)  GRAPH_DATA_YT_AddValue(ahData,6);   这样就没问题了。

注意:点击窗口关闭按钮是窗口会被删除,但该窗口的句柄(如果该 .. (2017-07-07 09:39)
原来如此,[s:142]

句柄清除可用WM_HWIN_NULL
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-19 22:00 , Processed in 0.041767 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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