cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 990|回复: 3

关于新建面板和新建控件的ID问题

[复制链接]
发表于 2009-3-18 09:36:46 | 显示全部楼层 |阅读模式
一个工程有两个源文件,一个是Test.c(主函数在这个源文件中),一个是function.c(主要包括一些较通用的函数);
还有一个用户头文件function.h;
uir文件尾Test.uir。

现在在Test.c中新建了一个面板panel与控件canvas,并在这个源文件的函数中使用了panel和canvas;而在function.c中也使用了panel和canvas。

如果在function.h中定义如下:
static int    panel;
static int    canvas;
在Test.c中可以使用它们,但使用后对其的赋值却不能在function.c中看到,比如新建一个面板和控件
panel = NewPanel ();
canvas = NewCtrl ();
经过调试,可以看到panel的值为5,canvas的值为2;
但在function.c中看到panel和canvas的值都为0;

但如果在function.h中定义如下:
int panel;
int canvas;
则在function.c中pane的值为5,canvas的值为2。

请问对于这样的面板和控件,应该怎样定位为宜?
发表于 2009-3-18 16:49:13 | 显示全部楼层
事实上,我不明白你为什么会这样做!
“一个是function.c(主要包括一些较通用的函数);”——既然是通用的函数,你有何必在其中调用特定的资源,而且,如果这些资源是动态创建的,很容易出问题!
 楼主| 发表于 2009-3-18 19:20:59 | 显示全部楼层
2# netcreature

因为我需要对这些特定的资源在function.c里进行判断,以进行相应的操作,而且这些资源并非动态创建,我的问题主要是这种资源应该是定为全局变量还是静态全局变量为宜?
发表于 2009-3-19 08:38:57 | 显示全部楼层
1、首先,这种做法并不好。对于针对特定资源的操作应放在同一模块中(即要写成子函数的形式);
2、当你使用如:panel = NewPanel ();canvas = NewCtrl ();New关键词创建的资源,都属于动态创建;
3、静态全局变量只能在模块内部使用(在这里,指function.c中);
4、使用外部函数的一个好的习惯应该是与资源无关的算法等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2025-4-21 07:52 , Processed in 0.581769 second(s), 6 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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