我的程序(在光盘上),需要在运行过程中弹出光盘,此时,程序还要执行其他任务,然后退出。 
目前遇到的问题是,有时候程序在光盘退出后,程序在执行到退出时,系统就弹出插入光盘对话框。我初步怀疑是,程序运行时没有全部载入到内存,然后光盘退出后,程序还需要读光盘上的内容,但是光盘已经退出,所以导致程序错误 
不知我分析的有无道理? 有没有什么编译选项或是什么办法,让程序全部载入到内存后,再运行,防止再次访问光盘。 我的程序只有一个exe文件。大小也很小300K 

解决方案 »

  1.   

    windows 从来不会把EXE映像全部映射到内存的
    所以你需要做一个临时地方储存映像
      

  2.   

    Starforce……
    设置内存的映射位
    1.用CreateFile来打开指定的文件,如果打开成功将返回文件的句柄(HANDLE),否则返回INVALID_HANDLE_VALUE;
        2.调用CreateFileMapping以创建文件映射对象,并传递上一步获得的HANDLE,将返回文件映射对象的句柄,失败的话返回NULL;
        3.调用MapViewOfFile(Ex),并传递上一步获得的文件映射对象,当然还要指定从文件的多少字节偏移处开始映射,以及要映射的大小——从Start到Start+Size构成了一个View,当然可以传递Size为0,那么将一直映射到文件结尾,如果映射成功,将返回可操作的地址,就像一个变量一样,随便怎么弄;
        4.使用这个地址,进行读写操作。通常不需要调用FlushViewOfFile来强制把修改写入到磁盘上的文件里,因为下一步的UnmapViewOfFile会把所有改动写入磁盘上的文件里的;
        5.当一切都搞定后,可以调用UnmapViewOfFile来取消映射,这回释放所有保留区域。如果在MapViewOfFile时传递了FILE_MAP_COPY,那么此步骤将放弃所有的修改,原文件将一点都不变化,否则,将写入改动后的数据;
        6.像关闭其他内核对象一样,调用CloseHandle依次关闭文件映射对象和文件对象,操作流程结束.
    我记得《参透Delphi》一书讲过了的
      

  3.   


    gyk120大侠果然很厉害啊,不过没看懂,感觉像在看VC。。