易码技术论坛

 找回密码
 加入易码
搜索
楼主: yan

[工具] 编译器Y2.26最终版 08/5/10更新

[复制链接]
发表于 2007-7-20 23:29:44 | 显示全部楼层
这个问题困扰了我一整天,还没有解决.主要是因为我对引用传参还一知半解.我研究了一整天,最终找到了问题的核心,我写了最简洁的例子来给大家看.
先写以下代码:
  1. struct noname
  2. {
  3.    int pt;
  4. };
  5. void f(struct noname &q)
  6. {
  7.    printf("%d",q.pt);
  8.    getchar();
  9. }
  10. char extern[100]="Lumj";//语句a
  11. void main()
  12. {
  13.    struct noname noname1;
  14.    noname1.pt=extern;
  15.    f(extern);
  16. }
复制代码
结果显示30028,然后把 语句a 用注释保护起来,再编译成noname.lav,再写 接口.txt:
  1. 1 f 0
复制代码
接下来弄出noname.y,再写nonameTest.txt:
  1. struct noname
  2. {
  3.    int pt;
  4. };
  5. char extern[100]="Lumj";
  6. void main()
  7. {
  8.    struct noname noname1;
  9.    noname1.pt=extern;
  10.    printf("%d\n",noname1.pt);getchar();
  11.    f(noname1);
  12. }
  13. #include "noname.y"
复制代码
运行结果很奇怪,是
  1. 8192
  2. 0
复制代码
而我预料的是8192,8192,因为我想把void f()做成链接库不会使结果改变.
然而,问题出在extern是全局变量,只要把它声明在main函数内部就没问题.
谁能告诉我这是怎么回事,该怎样修改?
发表于 2007-7-21 00:01:11 | 显示全部楼层
现在感觉很矛盾,在电脑端编程序,心里还老是惦记着星端编译器,想要在星端也能编译。参数很让人头疼:多用全局变量吧,怕养成坏习惯;传参数吧,哪里给意思相同的变量和参数起那么多不同的名字啊。星端编译器能用引用??对引用的概念还是一知半解的程度,再研究一下吧……
 楼主| 发表于 2007-7-21 00:31:58 | 显示全部楼层
呵呵,这个问题我在做链接库的时候也遇到。
原因是链接库对所有的操作全局的指令都会进行相对偏移,而在链接库定义的int或long型的引用使用了操作全局的指令,而实际上它可能是局部的(不需要偏移),结果却偏移了,所以就错误了。
目前没有办法解决这个问题。暂时不要在链接库使用int或long型的引用。
 楼主| 发表于 2007-7-21 00:41:03 | 显示全部楼层
更新了一下链接库源代码!里面含有新型的4灰度库。
多了个新型的4灰度库,以后开发4灰度程序不用针对某个机型开发。
但要注意:机型随Gray.dll决定,所以在用SetGraphMode函数切换模式时,一定要注意该函数的返回值。
比如:
int value;
value=SetGraphMode(2);
if(!value){SetScreen(0);printf("该机型不支持4灰度!");getchar();return;}
if(value<0){SetScreen(0);printf("缺少Gray.dll。请将Gray.dll下载到根目录下、LavaData目录下、GVMdata目录或LibData目录下");getchar();return;}
发表于 2007-7-21 07:50:28 | 显示全部楼层
好的.知道了。。4灰度软件以后我会做的
 楼主| 发表于 2007-7-21 11:30:57 | 显示全部楼层
问题解决了,近期将更新编译器。
发表于 2007-7-21 12:04:38 | 显示全部楼层
更新了啊
支持
发表于 2007-7-21 13:21:45 | 显示全部楼层
yan,请问你的那个输入法是怎么实现的。
就是编辑器里的中文输入法。。
 楼主| 发表于 2007-7-21 13:37:41 | 显示全部楼层
借鉴了gameghost的输入法的代码。
你可以参考一下他的代码。
 楼主| 发表于 2007-7-21 13:51:42 | 显示全部楼层
引用第957楼逍星2007-07-14 08:30发表的“”:
.....建议在出错时像gameghost一样有个具体地址位置.
算法不同啊,无法定位行数。在生成h文件时已经将所有的冗余字符(包括换行符)去掉了。
发表于 2007-7-21 13:53:49 | 显示全部楼层
编译器的预处理很差   象  0xf08x
这样的错误也会死机
 楼主| 发表于 2007-7-21 13:56:07 | 显示全部楼层
是编译系统,不是预处理系统。
下一版本会完善的。
发表于 2007-7-21 13:58:19 | 显示全部楼层

那就好,下一个版本快了吗?
还有就是四灰度的压缩图片的函数怎么用啊
比如一个图片是  char pic[]={,,,,,,,,,};
怎么压缩啊
 楼主| 发表于 2007-7-21 14:20:28 | 显示全部楼层
原型:void ChgData(char &pic[],int len)
功能:图片数据压缩。
说明:将16色图片压缩成4色。将pic所指的地址开始压缩len个字节,压缩后的图片数据还是放在pic中。
例子:
#include <Gray.y>
char pic16[6400]={.................};//16灰度的图片
void main()
{int value;
value=SetGraphMode(2);
if(!value){SetScreen(0);printf("该机型不支持4灰度!");getchar();return;}
if(value<0){SetScreen(0);printf("缺少Gray.dll。请将Gray.dll下载到根目录下、LavaData目录下、GVMdata目录或LibData目录下");getchar();return;}
ChgData(pic,6400);//压缩16灰度数据到4灰度数据,保存到pic中,长度文件6400/2=3200
WriteBlock(0,0,160,80,65,pic);//显示图片
getchar();
SetGraphMode(1);
}
发表于 2007-7-21 14:32:49 | 显示全部楼层
顶顶拉!
发表于 2007-7-21 14:56:14 | 显示全部楼层
又有更新!!!
顶!加油啊!
发表于 2007-7-21 15:03:10 | 显示全部楼层
引用第994楼yan2007-07-21 14:20发表的“”:
原型:void ChgData(char &pic[],int len)
功能:图片数据压缩。
说明:将16色图片压缩成4色。将pic所指的地址开始压缩len个字节,压缩后的图片数据还是放在pic中。
例子:
#include <Gray.y>
.......
如果要压缩几张图片
那么
ChgData(pic,6400);

只是上面的话系统只知道压缩后保存在PIC中
又怎么知道要压缩那张图片那?
 楼主| 发表于 2007-7-21 15:20:06 | 显示全部楼层
压缩第一个参数所指的地址啊,也就是pic了。
发表于 2007-7-21 15:54:36 | 显示全部楼层
原型:void ChgData(char &pic[],int len)
功能:图片数据压缩。
说明:将16色图片压缩成4色。将pic所指的地址开始压缩len个字节,压缩后的图片数据还是放在pic中。
例子:
#include <Gray.y>
char pic16[6400]={.................};//16灰度的图片
void main()
{int value;
value=SetGraphMode(2);
if(!value){SetScreen(0);printf("该机型不支持4灰度!");getchar();return;}
if(value<0){SetScreen(0);printf("缺少Gray.dll。请将Gray.dll下载到根目录下、LavaData目录下、GVMdata目录或LibData目录下");getchar();return;}
ChgData(pic,6400);//压缩16灰度数据到4灰度数据,保存到pic中,长度文件6400/2=3200
WriteBlock(0,0,160,80,65,pic);//显示图片
getchar();
SetGraphMode(1);
}



ChgData(pic,6400);//压缩16灰度数据到4灰度数据,保存到pic中,长度文件6400/2=3200

这段代码是压缩PIC指向的图片吗?
只有CHGDATA中只有两个参数
前面那个是什么意思
后面那个又是什么?
发表于 2007-7-21 15:56:11 | 显示全部楼层
引用第998楼yan2007-07-21 15:20发表的“”:
压缩第一个参数所指的地址啊,也就是pic了。
那么又保存在那个地址那?
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-5-14 16:35 , Processed in 0.022864 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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