posts - 51,  comments - 57,  trackbacks - 0
  置顶随笔

QQ:13633292。QQ群:28287492。 2008年8月后在北京,工作有点忙。 祝福你们身体健康,万事如意。

posted @ 2007-06-27 11:44 仙人指路 阅读(87) | 评论 (3)编辑 收藏
  2009年3月20日
北京的夜晚也静悄悄,在我的小小屋里面却不知为什么很兴奋,睡不着,在网上逛啊逛。看了很多有意思的图片,上校友录,想起了很多很多人,高中的那些同学。是不是都婚了,嫁了,祝你们生活幸福。小武好久也没有联系了,突然这两天想了,大概也再勤劳地相夫教子吧。

很想彩彩,虽然不再一块没多长时间,但一没事做总想让她做伴。

生活总是有很多后悔,后悔了也不会有再来一次的机会,今后的我宁愿多一些冲动,少一些犹豫,老婆是我最消沉的时候出现的,患难糟糠之妻一定好,努力做出点事情来让她生活好。为什么我感觉老婆比父母关心我还多,每天打电话每事都要管。怪不得人会变。当然父母兄弟是至亲,磨难的时候亲情是无人可比的。

用了搜狗的输入法,太棒了,太好用了,我一直喜欢用微软双拼,智能ABC的双拼和微软不一样,但搜狗却做的那么人性化,默认就是微软双拼的键,我都不用再记忆键了,而且速度超快,选词超级智能。

我这些天一直在做壳,公司原来的壳真是复杂,就是看着源代码,估计也没人能够破解。现在轮到我在接手这些没意义的东西。我是多么渴望能给几个驱动的活啊,windows的和linux的

我,王彩伟,还有谁
posted @ 2009-03-20 01:47 仙人指路 阅读(31) | 评论 (0)编辑 收藏
  2009年3月5日
继续努力
posted @ 2009-03-05 14:12 仙人指路 阅读(21) | 评论 (0)编辑 收藏

我会在windows中用perl语言了,虽然只是个命令行的pl脚本,但是我会调用动态链接库了,哈哈,那种引用的类型

posted @ 2009-03-05 14:11 仙人指路 阅读(63) | 评论 (2)编辑 收藏
  2008年12月4日

好久没有来了,想念这里了,节日快乐,我不再发牢骚了

posted @ 2008-12-04 20:45 仙人指路 阅读(27) | 评论 (0)编辑 收藏
  2008年10月21日

IE6不能查看源文件了,不是全部不能查看,是有些能,有些不能,网上搜的方法有清除internet临时文件,还有注册表中的View Source Code是不是windows/notepad.exe等等,都不行.

我把网页的编码方式来回改几次就可以了,先改成unicode编码,在改成 阿拉伯编码,再改成big5编码,再改成gb2312编码,瞎改几次就好了.

posted @ 2008-10-21 13:12 仙人指路 阅读(306) | 评论 (2)编辑 收藏
  2008年8月16日

费了很多周折,终于解决了数据库中的汉字乱码问题,过程就无需描述了,只把结果叙述下来:

  (1) php文本文件的字符格式都是gb2312(也就是ansi),如果有些怀疑,那就用UltraEdit编辑器另存一下,
保存成格式ansi(也就是gb2312)。在DreamWeave软件中,gb2312字符格式的文件看起来很舒服,其他字符格
式,比如utf-8看起来很别扭。

  (2) 别忘了在php的文件中加上这句话<meta http-equiv="Content-Type" content="text/html; charset=
gb2312">,虽然有时候不管用,但有时候却管用。

  (3) mysql建立的数据库的字符集是gb2312,在数据库属性中可以查看并修改。

  (4) 每个表的所有字符串的字段,字符集都是latin1或者binary,字符集是binary的时候其实字段类型就是
binary。

  (5) 最重要的就是把字段的字符集设置成binary(或者latin1)。别问我为什么,原因就是binary字段不会对
字符进行特殊加工。

完毕了,enjory吧。

posted @ 2008-08-16 14:18 仙人指路 阅读(293) | 评论 (0)编辑 收藏

 

1  最后决定用php集成安装包"xampp-win32-1.6.6-installer.exe", 在http://www.phpchina.com
   下载页面下载。

2  安装完成后在windows服务中看到两个,一个是apache,另一个是mysql。

3  安装完成后在浏览器中输入http://localhost会看到xampp管理页面,然后建议进入mysql的页面,
   设置root的密码

4  安装mysql的管理程序"navicat8_mysql_cs-v8.0.rar",忘记在哪里下载的了。安装好之后连接
   到mysql,管理界面很方便。

5  C:\xampp\apache\conf\httpd.conf是apache的配置文件。修改
   DocumentRoot "C:/xampp/htdocs"
   <Directory "C:/xampp/htdocs">
   DirectoryIndex index.php index.php4 index.php3 index.cgi ...
   三个地方,使用自己的网站根目录和默认文件。

6  参考资料:php的下载地址 http://cn.php.net/
   apache的下载地址 http://www.apache.org/
   mysql下载地址 http://www.mysql.com/

7 我觉得很有只要修改两个端口号,在apache\conf\httpd.conf文件中,搜索80全部改成801,在apache\conf\extra\httpd-ssl.conf文件中把443全部改成4431,这样就好了,因为很多软件都用这两个端口,所以改了它。

posted @ 2008-08-16 13:58 仙人指路 阅读(92) | 评论 (0)编辑 收藏
  2008年6月25日
C++模板
无法解析的外部符号
原来把模板类的声明定义放到一个文件中就可以了,.h和.cpp中的东西都放到.h文件中,我太强了
posted @ 2008-06-25 08:39 仙人指路 阅读(123) | 评论 (0)编辑 收藏
  2008年6月1日
ehci今天太兴奋了

usb-ehci-fat32今天太兴奋了,很强
posted @ 2008-06-01 18:46 仙人指路 阅读(137) | 评论 (0)编辑 收藏
  2008年4月24日

DOS中使用扩展内存

下载地址http://www.blogjava.net/Files/wudiasm/DOS扩展内存.rar

DOS中使用扩展内存

PS:某不才尽力保证所叙述的内容是正确的。
一 HIMEM.SYS和XMS
扩展内存(extended memory)是指超过8086的1M限制的内存,在使用之前,必须有扩展内存驱动程序,MS-DOS 7.10操作系统带有这个程序。在config.sys文件中要加上一句话:DEVICE=C:\DOS71\HIMEM.SYS,然后就能在程序中访问扩展内存了。

XMS是扩展内存管理规范,HIMEM.SYS程序符合XMS。如果有兴趣更深入地了解XMS规范,请打开本目录下的另一个文件<eXtended Memory Specification (XMS), ver 3.0>。注意一下,本文是针对MS-DOS 7.10中自带的扩展内存驱动程序HIMEM.SYS,不保证使用其它版本的或者其它扩展内存管理程序也能正确工作。

二 驱动入口
在使用驱动程序的功能之前,首先确认驱动程序是否存在,并找到功能的入口地址。

DWORD xms_func;             //保存XMS驱动程序的功能入口

bool xms_init()
{
    //首先确定XMS驱动程序是否存在
    BYTE is_exist;
    __asm
    {
        mov AX, 0x4300
        int 0x2F
        mov is_exist, AL    //如果已经装入XMS驱动,AL中会返回80h,
    }                       //否则,AL中的值不变
    if(is_exist != 0x80)
    {
        printf("XMS not exist! ");
        return false;
    }

    //找到XMS功能入口点
    WORD seg1, off1;
    __asm
    {
        mov AX, 0x4310
        int 0x2F
        mov seg1, ES        //ES:BX就是入口点地址
        mov off1, BX
    }
   
    //入口地址保存到xms_func中,下次当函数调用
    WORD* ptr_xms_func = (WORD*)(&xms_func);
    ptr_xms_func[0] = off1;
    ptr_xms_func[1] = seg1;

    return true;
}

三 分配和释放
使用扩展内存前要申请,用完之后要释放。

分配扩展内存,length以1K字节为单位, 返回分配内存的句柄:
WORD xms_alloc(WORD lenth)
{
    WORD result, handle;

    __asm
    {
        mov DX, length
        mov AH, 9          //功能号:9
        call xms_func      //调用XMS驱动
        mov result, AX     //AX=0,调用失败
        mov handle, DX     //DX=内存块句柄
  }
  
    if(result == 0)
        return 0;
    else
        return handle;
}

释放内存块:
void xms_free(WORD handle)
{
    __asm
    {
        mov DX, handle     //已分配的内存块句柄
        mov AH, 10         //功能号:10
        call xms_func      //调用XMS驱动
    }
}

四 读和写
向扩展内存块中写数据或者从扩展内存块中读数据,都需要使用一个数据结构,暂时把它命名为"传送结构":
struct xms_trans
{
    DWORD      length;       //要传送的字节数
    WORD       source;       //源内存块句柄,
    void far * source_addr;  //源地址在内存块中的偏移量
    //如果source=0,表示在常规内存中,这时source_addr是一个16:16的指针

    WORD       dest;         //目的内存块句柄
    void far * dest_addr;    //目的地址内存块中的偏移量
    //如果dest=0,表示在常规内存中,这时dest_addr也是一个16:16的指针
};

向扩展内存块中写数据:
struct xms_trans trans1;           //作为全局变量,分配在数据段中
bool xms_write()
{
    WORD temp, result;

    trans1.length = 66;             //长度必须是偶数
    trans1.source = 0;              //源数据在常规内存中
    trans1.source_addr = (BYTE far *)pBuf; //源数据的地址
    trans1.dest = DestHandle;       //目的地址在扩展内存中,向这个内存块中写数据
    trans1.dest_addr = 100;         //内存块中的偏移量

    temp = FP_OFF(&trans1);
    __asm
    {
        mov AH, 11                  //功能号:11
        mov SI, temp                //DS:SI是trans1的地址
        call xms_func               //调用XMS驱动
        mov result, AX              //返回AX=0表示调用失败
    }

    if(result == 0)
        return false;
    else
        return true;
}

从扩展内存中读数据:
bool xms_read()
{
    WORD temp, result;

    trans1.length = 66;            //长度必须是偶数
    trans1.source = SourceHandle;  //源数据在扩展内存中,从这个内存块中读数据
    trans1.source_addr = 100;      //在内存块中的偏移量
    trans1.dest = 0;               //目的地址在常规内存中
    trans1.dest_addr = (BYTE far *)pBuf; //目的地址

    temp = FP_OFF(&trans1);
    __asm
    {
        mov AH, 11                  //功能号:11
        mov SI, temp                //DS:SI是trans1的地址
        call xms_func               //调用XMS驱动
        mov result, AX              //返回AX=0表示调用失败
    }

    if(result == 0)
        return false;
    else
        return true;
}

五 其他事项
写程序的时候发现这样一个现象:
void hello()
{
    printf("hello everyone !");
}
void main()
{
    printf("%04X:%04X\n",FP_SEG(hello), FP_OFF(hello));    //两次显示的值相同
    printf("%04X:%04X\n", FP_SEG(&hello), FP_OFF(&hello));
    while(!kbhit());
}
使用FP_SEG和FP_OFF取得函数的地址,带与不带&符号,结果都一样。肯定是Borland C++把函数名仅仅当作一个标号来处理,标号就是段内偏移地址,对它再用&取地址没有效果。

另外一个就是Borland C++中保存地址的变量都是4个字节,sizeof(int *)、sizeof(void *)等于4,sizeof(int far *)、sizeof(void far *)也等于4。也就是说int far * pVal和int * pVal定义的效果是一样的,pVal高位两个字节放段地址,低位两个字节放偏移地址。

下面这些实验代码对我们也有点意义:
    int x = 999;
    int far * px = (int far *)(&x);
    int * pxx = (int *)(&x);
    printf("%d, %d \n", *px, *pxx);      //相同
    printf("%08lX, %08lX \n", px, pxx);  //居然也相同

和段地址和偏移地址有关的宏和函数有
FP_SEG:取地址4个字节中的高2个字节;
FP_OFF:取地址4个字节中的低2个字节;
MK_FP:将两个2字节连接成一个4字节;
peek, peekb:得到内存某个地址存放的数;
poke,pokeb:向内存某个地址写数。

六 总结
上面写的就是扩展内存最基本的用法,其实这些对于我们已经足够,第四节读和写两个函数是常规内存和扩展内存之间数据传输的最基本功能,各种各样的应用在这两个函数基础上搭建的。除此之外,XMS还有两个功能是把内存块锁定和解锁,我们暂时不管它。还有不要忘记了,分配的内存块要记得释放。    在此感谢dongsuoying提供的程序。

-------------------------------
杨志朋 2008年4月24日
yzp3646@163.com
yzp3646@sina.com.cn

posted @ 2008-04-24 19:25 仙人指路 阅读(540) | 评论 (3)编辑 收藏
仅列出标题  下一页