有一个exe 一个bat 一个 txt 怎么用c语言释放内存封装成一个exe在把释放出来啊。

使用C语言提取电子地图.bat格式文件中的信息并生成TXT文件(可排序、检索) - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 15时,
OS:Microsoft&Windows&XP&SP2Complier:Microsoft&Visual&C++&6.0/2005MSDN:Library&其中生成TXT文件的代码貌似有冗余...可改成一个函数进行调用。
代码片段(2)
1.&[代码][C/C++]代码&&&&
// E-Map.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include &time.h&
#include &stdio.h&
#include &stdlib.h&
#include &string.h&
#define MCGETCHAR(date)(*((char *)(date)))
#define MCGETSHORT(date)((unsigned short)((((unsigned short)(*((char*)(date))))&&8)|(((unsigned short)(*((char*)(date)+1)))&0x00ff)))
#define MCGETLONG(date)((((unsigned long)MCGETSHORT((date)))&&16)|(((unsigned
long)MCGETSHORT((char*)(date)+2))&0x0000ffff))
#define MCGET3BN(date)((((unsigned long )MCGETCHAR((date)))&&16)|(((unsigned long)MCGETSHORT((char*)(date+1))&0x0000ffff))
#define Length 65535
int Sizecount=2;
int Mark_1=0,Mark_2=0;
int ReadFile();//读取文件
void Qsort(int l,int r);//排序
int Binsearch(int s,int t,int key);//二分查找
int Search();//检索
struct RoadRecord {
long ulLinkID;
char Roadname[20];
struct RoadRecord road[Length];
struct Datestore { //定义结构体存储数据
char Totalsize[4];
char LinkID_1[5];
char Roadnamesize[2];
char Road_flag[2];
char Roadname[20];
static struct Datestore Ds[Length];
struct dateout {
long LinkID;
char Roadname[20];
struct dateout date[Length];
int ReadFile() {
int m , n=1;
char filename[50];
unsigned long ulLinkID;
unsigned short usR
FILE *fp_1=fopen("D:\\data\\GTBL.dat","rb+");
FILE *fp_2=fopen("D:\\data\\result.txt","w+");
if(fp_1==NULL) {
printf("\n\t无法打开文件'GTBL.dat' 或文件不再D盘根目录下\n\n请手动输入文件路径(路径中请勿有中文):");
scanf("%s",filename);
if ( (fp_1=fopen(filename,"rb+"))==NULL) {
printf("\n\t无法打开文件'GTBL.dat' 或文件不存在!\n\n");
else printf("\n\t文件打开成功!\n\n");
if(fp_2==NULL)
printf("\n\t无法打开文件'result.txt'或文件不存在!\n\n");
printf("\n\t文件读取中......\n");
while(fread(Ds[Sizecount].Totalsize ,2, 1, fp_1) == 1)
fread( Ds[Sizecount].LinkID_1 , 4, 1, fp_1 );
fread( Ds[Sizecount].Roadnamesize ,2, 1, fp_1 ) ;
fread( Ds[Sizecount].Road_flag, 4, 1 , fp_1 ) ;
ustotalsize = MCGETSHORT(Ds[Sizecount].Totalsize);
ulLinkID = MCGETLONG(Ds[Sizecount].LinkID_1);
usRoadnamesize = MCGETSHORT(Ds[Sizecount].Roadnamesize);
Ds[Sizecount].n=ustotalsize-12;
road[Sizecount].ussize=
road[Sizecount].ulLinkID=ulLinkID;
road[Sizecount].usRoadnamesize=usR
m=(int)Ds[Sizecount].Road_flag[3]&255;
road[Sizecount].usDispclass=m&15;
road[Sizecount].usBrunch=(m&112)/16;
road[Sizecount].usRoadnameflag=(m&128)/128;
date[Sizecount].Dispclass=road[Sizecount].usD
date[Sizecount].Brunch=road[Sizecount].usB
date[Sizecount].Roadnameflag=road[Sizecount].usR
date[Sizecount].LinkID=ulLinkID;
fread( Ds[Sizecount].Roadname , sizeof(char) , ustotalsize-12 , fp_1 );
strcpy(date[Sizecount].Roadname,Ds[Sizecount].Roadname+4);
fprintf(fp_2,"%d\t",n++);
fprintf(fp_2,"LinkID=");
fprintf(fp_2,"%d\t",date[Sizecount].LinkID);
fprintf(fp_2,"有无Flag=");
fprintf(fp_2,"%d\t",date[Sizecount].Roadnameflag);
fprintf(fp_2,"岔路数:");
fprintf(fp_2,"%d\t",date[Sizecount].Brunch);
fprintf(fp_2,"交叉Link列表示Class番号=");
fprintf(fp_2,"%d\t",date[Sizecount].Dispclass);
if(date[Sizecount].Roadnameflag==0) fprintf(fp_2,"该道路无名称");
fprintf(fp_2,"道路名称=");
fprintf(fp_2,"%s",date[Sizecount].Roadname);
fprintf(fp_2,"\n");
Sizecount++;
fclose(fp_1);
fclose(fp_2);
printf("\n\t文件读取成功\n\n
生成文件&D:\\data\\result.txt&\n\n");
void Qsort(int l,int r) {
//快速排序
int n=date[l].LinkID,i=l,j=r;
date[Length-2]=date[l];
Ds[Length-2]=Ds[l];
while(i&j)
while(i&j && date[j].LinkID&=n)
date[i]=date[j];
Ds[i]=Ds[j];
while(i&j && date[i].LinkID&=n)
date[j]=date[i];
Ds[j]=Ds[i];
date[i]=date[Length-2];
Ds[i]=Ds[Length-2];
Qsort(l,i-1);
Qsort(i+1,r);
int Binsearch(int s,int t,int key){
int low=s,high=t,
mid=low+(high-low)/2;
if(date[mid].LinkID==key)
if(date[mid].LinkID&key)
return Binsearch(low,mid-1,key);
return Binsearch(mid+1,high,key);
return -1;
int Search() {
int sel,i,flag=0,n,key,mid,s=2,t=Sizecount,count=1;
char Roadname[20];
printf("\n请输入检索方式:\n\t1:指定LinkID检索\n\t2:指定查找岔路数检索\n\t0:返回\n请选择:");
while((scanf("%d",&sel))!=1) { //判断输入的数据是否为数字
fflush(stdin);
printf("\n\t输入错误,请重新输入!\n");
printf("\n请输入检索方式:\n\t1:指定LinkID检索\n\t2:指定查找岔路数检索\n\t0:返回\n请选择:");
switch(sel)
case 1: { //LinkID检索
printf("请输入LinkID:");
scanf("%d",&n);
mid=Binsearch(s,t,key);
if(mid!=-1){
printf("\n\t检索到的信息不足5条,信息将显示在屏幕上!\n");
printf("\nLinkID=%d\tRoadnameflag=%d\tBrunch=%d\tDispclass=%d\tRoadname=%s\n\n",date[mid].LinkID,date[mid].Roadnameflag,date[mid].Brunch,date[mid].Dispclass,date[mid].Roadname);
if(flag==0)
printf("\n\t没有匹配结果,请重新选择检索方式!\n\n");
case 2: { //指定查找岔路数检索
printf("请输入岔路数:");
scanf("%d",&n);
for(i=2;i&Si++)
if(date[i].Brunch==n)
if(flag==0)
printf("\n\t没有岔路数为%d的道路!\n\n",n);
printf("\n\t转存到D:\\data\\岔路口检索结果.TXT\n\n");
p=fopen("D:\\data\\岔路口检索结果.TXT","w+");
for(i=2;i&Si++)
if(date[i].Brunch==n) {
fprintf(p,"%d\t",count++);
fprintf(p,"LinkID=");
fprintf(p,"%d\t",date[i].LinkID);
fprintf(p,"有无Flag=");
fprintf(p,"%d\t",date[i].Roadnameflag);
fprintf(p,"岔路数:");
fprintf(p,"%d\t",date[i].Brunch);
fprintf(p,"交叉Link列表示Class番号=");
fprintf(p,"%d\t",date[i].Dispclass);
if(date[i].Roadnameflag==0) fprintf(p,"该道路无名称");
fprintf(p,"道路名称=");
fprintf(p,"%s",date[i].Roadname);
fprintf(p,"\n");
fclose(p);
default: { // 递归调用search函数
printf("\n\t输入信息有误请重新选择检索方式!\n\n");
void main() {
int a,n=0,i,Mark_3=0,Mark_4=0,count=1;
clock_t start,
FILE *p1,*p2;
printf("|********************************--#######--**********************************|\n");
printf("|**
欢 迎 使 用
printf("|**
printf("|**
printf("|*****************************************************************************|\n\n");
printf("请选择服务的种类:");
printf("\n\t1:读取文件\n\t2:排序并输出结果\n\t3:检索\n\t0:退出\n请选择:");
while((scanf("%d",&a))!=1) {
fflush(stdin);
printf("\n\t输入有误,请重新输入!\n\n");
printf("请选择服务的种类:");
printf("\n\t1:读取文件\n\t2:排序并输出结果\n\t3:检索\n\t0:退出\n请选择:");
if(Mark_3==1)
printf("\n\t文件已经读取成功,如需再次读取文件,请关闭本程序重试!\n\n");
else if(ReadFile()==1)
Mark_3=Mark_1;
if(Mark_2==1)
printf("\n\t排序已经完成,如需再次排序请关闭本程序重试!\n\n");
if(Mark_1==0)
printf("\n\t请在排序前先选择'读取文件'操作!\n\n");
if(Mark_1==1)
if(date[2].LinkID!=1) {
start = clock();
Qsort(2,Sizecount-1);
finish = clock();
Time = (double)(finish - start)/CLOCKS_PER_SEC;
printf("\n\t排序成功,用时:%f秒!\n\n
排序后的文本文件&D:\\data\\Qsort.txt&\n\n
排序后的二进制文件&D:\\data\\Qsort.dat&\n\n",Time);
p1=fopen("D:\\data\\Qsort.dat","wb+");
p2=fopen("D:\\data\\Qsort.txt","w+");
for(i=2;i&Si++)
fprintf(p2,"%d\t",count++);
fprintf(p2 , "LinkID=%d\t" , date[i].LinkID);
fprintf(p2 , "有无Flag=%d\t" , date[i].Roadnameflag);
fprintf(p2 , "岔路数:%d\t" , date[i].Brunch);
fprintf(p2 , "交叉Link列表示Class番号=%d\t" , date[i].Dispclass);
if(date[i].Roadnameflag==0) fprintf(p2,"该道路无名称");
fprintf(p2,"道路名称=");
fprintf(p2,"%s\n",date[i].Roadname);
fprintf(p2 , " \n");
fwrite(Ds[i].Totalsize,2,1,p1);
fwrite(Ds[i].LinkID_1,4, 1, p1);
fwrite(Ds[i].Roadnamesize , 2, 1, p1);
fwrite(Ds[i].Road_flag , 4, 1 , p1);
fwrite(Ds[i].Roadname ,sizeof(char), Ds[i].n, p1);
fclose(p1);
fclose(p2);
printf("\n\t文件有序,无需重复执行此步骤!\n如需继续请将未更新的'GTBL.dat'文件放入D盘更目录下重试!\n\n
排序后的文本文件&D:\\Qsort.txt&\n\n
排序后的二进制文件&D:\\Qsort.dat&\n\n");
if(Mark_3==0)
printf("\n\t请先进行'读取文件'操作!\n\n");
if(Mark_3==1 && Mark_2==0)
printf("\n\t请在检索前先进行'排序'操作!\n\n");
printf("\n\t输入错误,请重新输入!\n\n");
while(n!=1);
E-Map.rar&~&295KB&&&&
开源中国-程序员在线工具:
相关的代码(2869)
开源从代码分享开始
酸菜炖粉条的其它代码& & bat编译exe程序
bat编译exe程序
MTK程序编译 徐亦朱 1.?? 编写目的 本文编写的目的主要是从整体上理解MTK的..所以运行JSP程序必须要有JVM的支持,还必须要有Java程序编辑、编译程序(JDK)..由于Fluted.exe要输入相应的配置参数,所以我干脆做了一个批处理文件f.bat: ..SQL预处理 SQLServer的预处理程序是nsqlprep.exe。 nsqlprep.exe在SQLServe..告诉编译器程序会被加载到7C00H处mov ax, 设置 DS和ES=CS,将数据段和附..exe 输入文件:horse.dat 输入文件格式: horse.dat文件可由C程序生成,包含内..优化C编译器、链接器等,可以帮助用户在一个软件环境下完成编辑、编译、链接..的目录下,用户仍然可以编译VTK程序。 ·VTK_DATA_ROOT——vtkdata-5.4.2.zip..下列关于程序设计的说法正确的是( )。 A.程序设计就是指示计算机如何去解决..进行编译和连接,生成.obj文件和.exe文件,但不运行该程序; F10-Menu(菜单):激..运行Java 程序 使用Java 解释器(java.exe)可将编译后的字节码文件Hello.cla..pl是PERL的代码程序自动调用 perl.exe文件解释,即使现在也只能把perl.exe文..3、文件扩展名为.COM、.EXE、.BAT的文件都是二进制文件。( ) 4、内部命令是..SQL预处理器 SQLServer的预处理程序是nsqlprep.exe。其常用的语法格式如下:..|连接程序 |编辑程序 |编译程序 |诊断维护程序 11.计算机内部用于处理数据和..A..vbp B..frm C..cls D..bas 13.将一个VB程序保存在磁盘上,至少会产生的文..COM为,.EXE为,.BAT为,.SYS为,.TXT为。12、各种符号、数字、字母等统称 字符..操作系统的功能是_ A、将源程序编译成目标程序 B、负责诊断机器的故障 C、控..goto 标签 将cmd.exe导向到批处理程序中带标签的行(标签必须单独一行,且以冒..程序是一组编译代码,可以执行相关的数据计算与操作,这些代码由一条条的指令..
本文bat编译exe程序的相关文章
1、2、3、4、5、6、7、8、9、10、最简单的打包方法:用RAR把易表文件封装成.EXE - kxh3618的日志 - 网易博客
最简单的打包方法:用RAR把易表文件封装成.EXE - kxh3618的日志 - 网易博客
最简单的打包方法:用RAR把易表文件封装成.EXE
12:30:38 阅读1051 评论 &&字号:大中小&
&&&&& 这是我(nxhujiee)几年前写的一篇精华贴子,发在老的易表论坛上(现在已经打不开了)。几年后我发现还有那么多易表的忠实用户,心里着实感动了一把(这年头让人感动的事情不多啊)。因为我也曾是易表的正版用户,花600大洋买了两份注册。已经好几年不玩易表了,看到很多易友还在翻我的陈年老贴,又感动了一把,(同时也对老六这厮强烈不满,五年了,封装成EXE这么点小事还没有解决,真是对不起这么多忠实的易友啊) 便从别的论坛中把这篇文章转到我的空间里来,发现所有转载我的文章的地方都把图示丢掉了。我转来的文章也没有图片。
&&&&& 今天又有易友在我的空间里留言说没有图片看不懂,我就好人做到底,随便找了个以前的程序演示一遍。因为好久不玩了,我只能保证封装过程绝对正确,有可能出点小问题的就是:里面填的路径是否正确,自己试试吧,很简单的。我没有易表环境无法测试,对不起了。
&&&&& 另外说明一点,有朋友说这样封装后只是压缩了一下文件,一看就是根本没有自己动手做过。用Winrar封装的exe文件和真正的exe文件一样,运行后真接打开易表文件,不仅仅是压缩了一下文件而已。其实,大家经常见的汉化软件之类,80%都是用WINRAR封装的,不知道的人还以为汉化者也会编写安装程序呢,呵呵。不信,你找几个汉化软件,不要双击,点右键,如果右键菜单中出现一项“用winrar打开”,那就一定是用它封装的,打开后看看和普通的压缩包一模一样,只不过在注释中多了一些安装脚本而已。(会动脑筋的易友肯定又想到了点什么?这也是学习安装制作的一个好办法啊,去”汉化新世纪“下几个汉化补丁研究一下吧……)
最简单的打包方法:用RAR把易表文件封装成.EXE
原创:nxhujiee
&&&&& 看到坛子里很多易友为把自己的易表作品封装成.EXE可执行文件煞费苦心,尤其是对新手们来说真的是好难哟,老六这家伙也不知道是怎么想的,举手之劳嘛,加上个打包功能不就得了!都怪俺这人本性善良,不由得动了恻隐之心,我这里给大家个简单的法子,保证菜鸟、菜菜鸟也一看便会。&&&&& 首先不必找什么专门的工具,用手边的WinRar压缩工具就可以了。这个99%的电脑上都有的(你没有?那肯定是菜到家了)。下面开始吧:◆第一步:打开你的易表文件所在文件夹,选中所有要安装的文件,点右键,选中"添加到档案文件……"
◆第二步:最重要的一步是选中“创建自释放格式档案文件”!然后给你将要生成的.EXE文件选一个好名字。压缩方式选项默认是“标准”,建议选“存储”,就是不压缩,只比标准大一点点,但安装的时候速度就快很多了。
◆第三步:点开高级选项卡,选中“SFX选项”进行设置。
◆第四步:选设置安装的时候默认安装位置,建议选第一项或第三项,默认也可以,反正到时候会让你选择路径的。“安装程序”,也就是安装过程,最容易出错的地方!!!运行环境必须为释放前运行,也就是在释放过程中运行,主文件应该是在释放后运行。
◆第五步:点击填加快捷方式,按提示操作,可以添加到桌面,也可以添加到启动栏。很简单,一看便知。
(在目标文件夹中填上你释放的路径)◆第六步:安装程序界面上的文字,上面是标题栏上的文字,中间是安装程序界面上的文字信息。在最下面你还可以给你的安装程序选一个个性点的图标!!!有点不足的是这个图标只能显示在安装程序上,安装后的易表文件的图标与此无关。
第七步:按两下“确定”,等2-3秒钟,你的安装程序就在当前目录下生成了。最后,看看你的安装程序运行时的界面:
怎么样,不难看吧?比老六推荐的那个什么GO如何?
------------------------------------------------------------------------
&&&&& 又有易友留言称没有搞定,我只好再做一次好人,我做了一个演示文件,建立了两个模拟的BAT文件:主文件.bat;环境文件.bat,进行了打包演示,里面有两张关键步骤的演示图片和打包好的EXE文件,你可以运行一下,看看先执行的是什么,后执行的是什么,试一试就知道了。
注意:打包的时候请进入文件夹选中两个文件打包,而不是将文件夹打包,切切!
演示文件请到这里下载:
http://main./?uid-453602-action-viewspace-itemid-67946
&&& 这里还有俺的一篇关于易表的精华贴子《ACCESS和易表之比较》,也许对您有点帮助:
0人&&|& 分享到:&&&&&&&&
阅读(1051)| 评论()| 引用 (0) |举报
历史上的今天
登录后,您可以在此留下足迹。
发表评论:
TA的最新馆藏[转]&[转]&

我要回帖

更多关于 bat54c封装库 的文章

 

随机推荐