windML功能扩展问题

xyyyxmh   2007-4-9 11:11 楼主
鄙人第一次访问:向各位大侠问好!大家好!
  
我刚开始做windML界面开发不久,问的问题可能不太专业,各位打下不要见笑哦。大家知道用windML作界面人机交互性很差,所以我想对它的功能作一些扩展,比如:实现彩色边框,组框,文本框等功能。我在的问题是:我这些功能以源代码的形式写在应用程序中可以正确显示结果,可是如果我把这个功能源码单独写在一个C文件中,然后在一头文件的形式调用,结果发现只调用函数名,不执行函数体,结果就显示不正确啦,请问我哪里没做对阿!请予以指教!

回复评论 (13)

不知道你说的只调用函数名,不执行函数体是什么意思?能说清楚一点么。
点赞  2007-4-9 12:28
先谢谢您啦大虾!
是这样的,我把函数名放在头文件中拉,根据应用程序的执行结果,我觉得应该是应用程序只调用了函数名,因为函数定义在另一个C文件中,也就不报错,但实际并没有执行函数体,也就是该函数相应的功能实现部分。
不知道我这样说能表达清楚我的意思不,您明白没有?
点赞  2007-4-9 18:35
一般不会出这种问题。你可以在你的函数体里加一条打印语句,就知道语句是否执行了。
通常出这样的问题,有可能是函数调用的时候参数出错了。
点赞  2007-4-9 18:50
举个例子吧:我欲实现组框功能,我就编写了groupbox.h和groupbox.c然后我把groupbox.h加进我的应用程序中,这样就显示不了组框,如果我把groupbox.c中的函数代码直接加进我的应用程序,而不是通过调用我已经封装好的函数,那就能显示组框。请问我哪里没有顾及到阿?谢谢!
点赞  2007-4-9 18:54
谢谢,我在按你说的方法试试。
点赞  2007-4-9 19:09
大侠,我还是没能解决问题,我把程序主要部分考下来啦,你帮我分析一下吧,谢谢!
/*下面是我写的功能函数*/
#include "color_init.h"
#include "colorfulRect.h"

void wyy_colorfulrect(UGL_GC_ID gc,int bcolor, int x, int y, int lx, int ly, int x_num, int y_num)
{
uglBatchStart(gc);
...

uglBatchEnd(gc);
}
/*头文件*/
#include
#include


#ifndef TEXTOUT_H
#define TEXTOUT_H

void wyy_colorfulrect(UGL_GC_ID gc,int bcolor, int x, int y, int lx, int ly, int x_num, int y_num);

#endif

/*这是我应用程序的一部分*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "hzk.h"
#include "colorfulRect.h" /*包含我的头文件*/

/*主程序部分*/
UGL_LOCAL int ExeRect(void)
{
        UGL_GC_ID gc;
        UGL_DEVICE_ID     devId;        /*def device's ID*/
        UGL_ORD textOrigin = UGL_FONT_TEXT_UPPER_LEFT;
        UGL_FONT_DEF systemFontDef;       /*def system's font */
        
        uglInitialize();
        。。。
        gc=uglGcCreate(devId);
        。。。
        /*调用我写的功能函数部分*/
        wyy_colorfulrect(gc, GREEN, 200,20,400,220,4,4);
        
         ExePause();
         uglGcDestroy(gc);
        uglDeinitialize();
        return(0);
}
点赞  2007-4-9 20:18
这样看源代码是没有用的。
你在你的wyy_colorfulrect函数里,加几条打印信息,看执行到哪里。
一般可以单步跟踪的吧。
点赞  2007-4-9 20:29
好的!谢谢!
点赞  2007-4-9 20:38
大侠,现在问题是这样的:我调试时,当程序执行到任务入口函数时,就跳到汇编中开始执行啦,就见不到执行主函数部分,所以也就看不到我调用的函数执行没有,设置断点也没用,汇编部分我也看不大明白,它就是主函数的汇编吗?
点赞  2007-4-9 21:30
不是,由于你没有把你写的.c文件加入工程,所以无法用单步跟踪。那些汇编是你写的程序的代码。
要么你可以把你源文件加入再编译,要么你在单独的C文件里加打印信息。
点赞  2007-4-9 21:36
我写的.C文件加到工程中了啊,我把源文件加入再编译能通过,但我的原意是把扩展的功能模块独立出来,以打包加载模块。我在单独的C文件里加打印信息啦,但是就如我上面所说的,没用怎么办啊?
点赞  2007-4-9 21:43
如果你要单步跟踪,只有加入工程一起编译。如果你单独以库的形式提供,需要重新编译一下WINDML库。
点赞  2007-4-9 21:57
大侠,问题解决了,谢谢你啊!我把我的.c和.h合写在一起合成一个.h再把.h加进我的应用程序,就OK啦!
点赞  2007-4-10 16:12
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复