主题:[HELP]有没有能编译大程序的编译器
maxumi
[专家分:2200] 发布于 2006-06-26 09:04:00
如题!
QB自带的编译器只能编译90K左右的代码,然则本人写的代码有400多K, 只有用QB7.1的/Ea和/E命令才能读入QB运行.请问有没有能把这样的程序编译连接成EXE的东西?
回复列表 (共14个回复)
沙发
moz [专家分:37620] 发布于 2006-06-26 11:10:00
有很多方法,
1. 把你独立的函数和过程编译成快速库,
再跟主程序连接编译,因为每次只能连接一个快速库LIB,
所以文件过大的时候,你需要多次包含编译.
例如: 第一次编译3个函数
第二次把这个快速库包含进来,再加上3个函数,编译出新的一个快速库.
一直到完成为止.
2. 对程序中的代码根据FreeBasic的特性作修改,用FB编译.
板凳
maxumi [专家分:2200] 发布于 2006-06-27 08:22:00
moz兄,我的程序里独立的SUB和FUNCTION不多,而且还调用了中断,FB编译不了......
3 楼
moz [专家分:37620] 发布于 2006-06-27 10:48:00
1. 调用中断? 谁叫你调用中断? 就没有其他办法能替代了?
2. 独立的不多? 谁叫你没养成独立的习惯? SUB和FUNCTION的结构本身就为了独立而存在的.
4 楼
maxumi [专家分:2200] 发布于 2006-06-27 15:18:00
1. DOS下用鼠标要调用int33h, 这个FB行么?
2. 如果所有的SUB和FUNCTION独立, 那么参数都可以写到让QB显示"Line too long"了.
5 楼
moz [专家分:37620] 发布于 2006-06-27 17:02:00
你知道一个字符串最长可以达到多少个字符吗?
FB有支持鼠标的函数.
6 楼
maxumi [专家分:2200] 发布于 2006-06-28 08:18:00
32767个.
然则QB一行貌似只能有1024个字符.
7 楼
qb45 [专家分:2880] 发布于 2006-06-28 09:57:00
记得我写一个硬盘工具的时候就是用的多模块
有HD。BAS ‘读写大容量硬盘的模块,主要是扩展INT13
MOUSE。BAS ’鼠标功能的模块,对鼠标的位置、形状、按键进行判断,主要调用INT33
TXTDLL。BAS ‘文本模式下显示汉字的模块,主要调用INT10完成
TXTHZ。BAS’文本模式下的按钮、菜单、窗口等等通用函数,鼠标功能调用了MOUSE。BAS模块,别的用QBASIC语句完成
MINE。BAS ‘主模块,进行各个子模块的调用。
通过各个子模块分别调试,然后在主模块里总装,最后编译的时候非常顺利!
写大程序一定要用模块化编程,不然,无法调试程序的复杂不可想像。
在QBDOS。51。NET有相关功能的模块下载,当然这些模块都是可以单独运行的,它本身就是一个BAS程序,别被模块这个词吓住了。
8 楼
qb45 [专家分:2880] 发布于 2006-06-28 10:06:00
你的程序在FB里估计是用不成,FB是保护模式下运行的,要实现实模式中断调用语句有些复杂。
最好的方法还是用多模块组装的方法,或者是moz说的做成库!
多模块编程也简单,方法:
我简单的说个例子
有2个BAS程序,
1是TEST。BAS,里面有一个子程序如:
SUB DEMO (T$)
PRINT T$
END SUB
2是MINE.BAS,内容是
这里要把TEST.BAS里的DEMO这个子程序的声明复制过来
然后点FILE菜单--->LOAD FILE 选择TEST文件,这样DEMO子程序就可以在这个程序中调用了
CALL DEMO "OK"
说起来很复杂,很麻烦,实际操作起来非常简单!
9 楼
moz [专家分:37620] 发布于 2006-06-28 11:44:00
变长字符串最长可以达到32767个字符
如果拿这个变长字符串来做参数的话,能包含多少你所需要的参数信息?
10 楼
maxumi [专家分:2200] 发布于 2006-06-28 15:59:00
[quote]变长字符串最长可以达到32767个字符
如果拿这个变长字符串来做参数的话,能包含多少你所需要的参数信息?[/quote]
据我所知, 这样会Out of Stack的.
我来回复