鄙人第一次访问:向各位大侠问好!大家好!
我刚开始做windML界面开发不久,问的问题可能不太专业,各位打下不要见笑哦。大家知道用windML作界面人机交互性很差,所以我想对它的功能作一些扩展,比如:实现彩色边框,组框,文本框等功能。我在的问题是:我这些功能以源代码的形式写在应用程序中可以正确显示结果,可是如果我把这个功能源码单独写在一个C文件中,然后在一头文件的形式调用,结果发现只调用函数名,不执行函数体,结果就显示不正确啦,请问我哪里没做对阿!请予以指教!
不知道你说的只调用函数名,不执行函数体是什么意思?能说清楚一点么。
先谢谢您啦大虾!
是这样的,我把函数名放在头文件中拉,根据应用程序的执行结果,我觉得应该是应用程序只调用了函数名,因为函数定义在另一个C文件中,也就不报错,但实际并没有执行函数体,也就是该函数相应的功能实现部分。
不知道我这样说能表达清楚我的意思不,您明白没有?
一般不会出这种问题。你可以在你的函数体里加一条打印语句,就知道语句是否执行了。
通常出这样的问题,有可能是函数调用的时候参数出错了。
举个例子吧:我欲实现组框功能,我就编写了groupbox.h和groupbox.c然后我把groupbox.h加进我的应用程序中,这样就显示不了组框,如果我把groupbox.c中的函数代码直接加进我的应用程序,而不是通过调用我已经封装好的函数,那就能显示组框。请问我哪里没有顾及到阿?谢谢!
大侠,我还是没能解决问题,我把程序主要部分考下来啦,你帮我分析一下吧,谢谢!
/*下面是我写的功能函数*/
#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);
}
这样看源代码是没有用的。
你在你的wyy_colorfulrect函数里,加几条打印信息,看执行到哪里。
一般可以单步跟踪的吧。
大侠,现在问题是这样的:我调试时,当程序执行到任务入口函数时,就跳到汇编中开始执行啦,就见不到执行主函数部分,所以也就看不到我调用的函数执行没有,设置断点也没用,汇编部分我也看不大明白,它就是主函数的汇编吗?
不是,由于你没有把你写的.c文件加入工程,所以无法用单步跟踪。那些汇编是你写的程序的代码。
要么你可以把你源文件加入再编译,要么你在单独的C文件里加打印信息。
我写的.C文件加到工程中了啊,我把源文件加入再编译能通过,但我的原意是把扩展的功能模块独立出来,以打包加载模块。我在单独的C文件里加打印信息啦,但是就如我上面所说的,没用怎么办啊?
如果你要单步跟踪,只有加入工程一起编译。如果你单独以库的形式提供,需要重新编译一下WINDML库。
大侠,问题解决了,谢谢你啊!我把我的.c和.h合写在一起合成一个.h再把.h加进我的应用程序,就OK啦!