| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2658 人关注过本帖
标题:探讨:foxpro.h文件是如何被包含在表单中,有什么办法删除?
只看楼主 加入收藏
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
结帖率:99.55%
收藏
已结贴  问题点数:20 回复次数:24 
探讨:foxpro.h文件是如何被包含在表单中,有什么办法删除?
原来曾经有网友发贴,称程序无法编译,提示“找不到FoxPro.h文件”。昨天我将项目复制到移动硬盘上,换了一台电脑来编译,由于这台电脑上VFP安装在D盘,与原来电脑中的盘符不同,所以也出现了这个问题,导致无法编译。虽然我回到原来的电脑上顺利地编译了,但我不明白这个FoxPro.h文件是如何包含进表单中的?它起什么作用?用什么办法才能删除这个包含?
说来也惭愧,自从1994年开始学习FoxBASE算起,到现在近二十年了,但毕竟还是业余爱好,仅了解点皮毛,从未深究过。发此贴一方面是想活跃一下论坛气氛,另一方面也想加深一点对VFP的了解。
搜索更多相关主题的帖子: 表单 台电脑 如何 
2012-04-04 21:23
bccn201203
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:680
专家分:1140
注 册:2012-3-14
收藏
得分:3 
查下表单代码中是否有#include,
找到这个#include *.h,删除该行代码即可。

#include 预处理指令
告诉 Visual FoxPro 预处理器去处理指定头文件的内容,就好象头文件中的内容出现在 Visual FoxPro 程序中一样。

语法

#INCLUDE FileName

参数
FileName

指定头文件的文件名。头文件在编译时将合并到程序中去。
头文件名中可以包含路径。当头文件名中包含路径时,Visual FoxPro 只在指定路径里寻找头文件。
如果头文件名中不包含路径,则 Visual FoxPro 首先在默认的 Visual FoxPro 目录中寻找头文件,然后沿着 Visual FoxPro 路径寻找。Visual FoxPro 路径用 SET PATH 指定。

说明

您可以创建包含预处理器命令的头文件,然后在编译程序时用 #INCLUDE 命令把它的内容合并到程序中去。编译时,头文件的内容放在程序中 #INCLUDE 命令出现的位置。
头文件中,只有 #DEFINE ... #UNDEF 和 #IF ... #ENDIF 预处理器命令有效。头文件中的注释和 Visual FoxPro 命令无效。
一个程序可以包含任意多个 #INCLUDE 命令,并且这些命令可以出现在程序中的任何位置。#INCLUDE 命令也可以出现在头文件中。Visual FoxPro 允许嵌套 #INCLUDE
命令。
头文件一般具有 .H 扩展名,但是也可以带其他扩展名。Visual FoxPro 提供了一个头文件 FOXPRO.H,它包含了本文档中所提到的许多常量。


[ 本帖最后由 bccn201203 于 2012-4-4 21:47 编辑 ]
2012-04-04 21:37
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:3 
回复 楼主 hu9jj
看下TONYDEND版主的贴子
https://bbs.bccn.net/thread-362146-1-1.html

坚守VFP最后的阵地
2012-04-04 21:53
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:7 
是这个东西吧?在VFP的安装目录中

foxpro.h.zip (40.62 KB)

非压缩文件,不要.zip扩展名即可。

授人以渔,不授人以鱼。
2012-04-04 22:13
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:6 
回复 楼主 hu9jj
打开表单或类,点击菜单上的 [表单] 或 [类] ,点击 [包含文件] 菜单,删除里面的 .h 文件的引用即可。
2012-04-04 22:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
.h文件是从C/C++语言借过来的概念,.h是head的意思,被称为“头”。因为C/C++是编译型语言,程序代码是用编译器编译成机器码之后执行的(对应地,FoxPro/VFP是解释型语言,程序要用解释器逐行解释执行,所以才有命令行那样的输入命令回车立即见效功能),C/C++编译器编译程序要执行三个步骤,第一步,是“预处理”阶段,这阶段主要对“头文件”做处理。比如你的程序文件(.prg或别的表单)#include了某个头文件,而这个头文件中有#define PI 3.14这一行指令,那么编译器就会在这个.prg文件中全文搜索PI标识符(从#include出现的地方开始往后搜,只处理标识符,不处理字符串),把PI替换为3.14,这样相当于,你在程序写S=PI*R^2,被替换为S=3.14*R^2,如此一来,你写的代码就可以用有意义的PI替换无意义的3.14,而且,假如你有10个地方写到PI,那么将来有一天你需要把3.14改为3.1415926,就只需要修改#define PI 3.1415926即可,编译器会自动把这10个PI都替换为新值,而不用你到处找这10个常量逐个修改(你未必保证所有修改都找到,也不保证都改得一致)。更重要的是,PI是有意义的常量标识符,但它又不是变量,不占内存空间,速度更快,当你有多个不同意义的常量,但量值又一样的时候(比如某时候0代表“只读”,某时候又代表“星期日”),用有意义的标识符区分不同的常量就更有必要了,你可以#define READONLY 0和#define SUNDAY 0,这样把某天决定,用1代表星期日,就不至于把代表READONLY的某个0误改为1。编译器在做过预处理之后,才正式编译程序代码,因为第一步在正式编译之前,所以叫“预处理”步骤。

我们通常在VFP的IDE下执行程序,此时是解释执行的,VFP会解释执行.prg命令文件中#include指令,在内存中建立一张对照表,即使“翻译”以后遇到的每条VFP命令,翻译完后才正式解释代码并执行。但如果我们把程序编译为.exe独立可执行文件,VFP就会做像C/C++编译程序那样的动作,把.prg翻译好再编译、连编为.exe文件,之后,原来的.prg和.h文件都不再需要了。因此,只要你在开发机器上编译好,移动系统到别的机器,是不需要再有这个foxpro.h头文件的(但仍然要VFP的运行库.dll)。

现代C#语言和C++都不再鼓励使用.h头文件了,建议改用常量型变量替代旧式C的#define,比如在C/C++中改用const double pi = 3.1415926定义一个变量pi,因为这样明确了这个数值是双精度浮点数,可以在编译阶段做更多的数据类型匹配检查。但VFP跟C/C++不一样的地方,前者不是强类型编程语言,它对数据类型没有那么敏感,每种数据类型变量都可以轻松地随时变换为别的数据类型,这在C/C++中是不允许的,所以在这方面,VFP还是可以使用#define指令。

预处理指令的使用,除了上述的#define之外,还有一些指导编译动作的指令,这是更重要的手段,可以控制程序的流程,不过,在VFP中较少用。

[ 本帖最后由 TonyDeng 于 2012-4-4 22:57 编辑 ]

授人以渔,不授人以鱼。
2012-04-04 22:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
马上打开foxpro.h,就能看到下面这样的代码:
程序代码:
*-- TYPE() tags
#DEFINE T_CHARACTER     "C"
#DEFINE T_NUMERIC       "N"
#DEFINE T_DOUBLE        "B"
#DEFINE T_DATE          "D"
#DEFINE T_DATETIME      "T"
#DEFINE T_MEMO          "M"
#DEFINE T_GENERAL       "G"
#DEFINE T_OBJECT        "O"
#DEFINE T_SCREEN        "S"
#DEFINE T_LOGICAL       "L"
#DEFINE T_CURRENCY      "Y"
#DEFINE T_UNDEFINED     "U"
#DEFINE T_INTEGER       "N"
#DEFINE T_VARCHAR       "C"
#DEFINE T_VARBINARY     "Q"
#DEFINE T_BLOB          "W"


在编程中,我们经常使用IF VARTYPE(x) == "C"这样的语句来判断变量x的类型,但"C"这样的常量字面值,其实并不好记,如果使用上面的头文件,就可以写成IF VARTYPE(x) == T_CHARACTER这样,熟悉英文单词的人,看见character比看见"C"更明白那是什么,分明就是"type character"。再往下看看那些在某些领域也会经常用到的宏定义,就知道这样做的好处。比如,在这里,可能没有人意识到整数Integer的VARTYPE()返回值,竟然是"N",也就是说,在VFP中,整数与浮点数是等同的,即整数和浮点数之间,其实根本不需要转换(更确切地说,都是以字符串形式储存的)。

授人以渔,不授人以鱼。
2012-04-04 23:18
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
一般来说,我们平时写程序很少使用foxpro.h头文件,但我们不确保VFP向我们提供的类库有没有使用。也就是说,虽然我们自己明明没有写#include "foxpro.h",却偏偏提示说缺了这个文件,那么,可能就是我们使用的某个现成类库用到了。那么,为什么平时不察觉呢?那是因为我们一般在VFP的IDE中运行程序,而foxpro.h是放在VFP的安装目录中的,是VFP的默认文件搜索路径,在这种模式下运行程序,它用了你也不知道。

授人以渔,不授人以鱼。
2012-04-04 23:30
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2214
专家分:3882
注 册:2007-4-27
收藏
得分:0 
坛中高手如云,水真的好深,学习了……谢

只求每天有一丁点儿的进步就可以了
2012-04-05 08:22
软件服务
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:344
专家分:736
注 册:2011-12-23
收藏
得分:1 
这文件不用包含在项目中,删除了吧
2012-04-05 12:15
快速回复:探讨:foxpro.h文件是如何被包含在表单中,有什么办法删除?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041592 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved