#include "Afx.H"
const LPCTSTR __stdcall GetHostIPs(LPTSTR str,long strLen)
{
LPCTSTR m_lpszBuf=NULL; bool f_Find=TRUE;
char m_imput[20];
char* p_imput=NULL;
unsigned int index=0;
unsigned int temp;
const char table[][3]={
{'E','P','B'}, //PCB板
{'E','I','C'}, //IC
{'E','T','S'}, //三极管
{'E','D','D'}, //二极管
{'E','R','S'}, //电阻
{'E','C','P'}, //电容
{'E','Q','C'}, //晶体,晶振
{'E','S','P'}, //扬声器,蜂鸣片
{'E','I','L'}, //线圈
{'E','B','T'}, //电池
{'E','T','F'}, //变压器/火牛
{'E','L','C'}, //液晶显示屏
{'E','T','R'}, //可控硅/晶閘管
{'E','J','K'}, //插座
{'E','F','S'}, //保险丝
{'E','E','L'}, //EL背光片
{'E','L','D'}, //LED灯
{'E','R','B'}, //斑马条
{'E','S','W'}, //开关
{'E','J','W'}, //线材 / 跳线
{'E','M','T'}, //马达
{'E','C','W'}, //电缆
{'E','S','K'}, //插槽
{'I','D','C'}, //电镀/喷油/丝印胶件
{'I','T','M'}, //胶件
{'I','R','B'}, //橡胶
{'M','S','C'}, //螺丝
{'M','N','U'}, //螺母
{'M','P','B'}, //电池片
{'M','S','P'}, //弹簧
{'M','W','S'}, //介子
{'M','M','P'}, //五金片
{'M','S','F'}, //光轴
{'M','V','W'}, //偏心轮
{'P','L','B'}, //贴纸
{'P','M','U'}, //说明书
{'P','W','S'}, //警告纸
{'P','G','C'}, //保养卡
{'P','P','T'}, //海报
{'P','G','B'}, //彩盒
{'P','I','C'}, //插卡
{'P','F','C'}, //平卡
{'P','B','L'}, //吸塑
{'P','P','E'}, //PE袋, 发泡胶袋
{'P','C','A'}, //卡通箱
{'P','T','P'}, //雪梨纸
{'P','P','F'}, //发泡胶
{'P','G','H'}, //彩盒提手
{'X','A','T'}, //胶带
{'X','S','P'}, //海绵
{'C','S','O'}, //固体胶
{'S','O','F'}, //软件
};
unsigned char pcb_thick [][6]={"0.4mm","0.6mm","0.8mm","1.0mm","1.2mm","1.6mm","2.0mm"};
unsigned char PCB_pcb_material [][7]={"FR4","CM3","PP","FR2","94V0","94HB","CEM1","CEM2","FPC","Others"};

CString n_table[]={"语文","数学"}; static CString m_str; if(strLen!=17) //判断导入数据长度
{
m_str="数据长度出错";
m_str+="请更改";
m_lpszBuf=m_str;
return m_lpszBuf;
} p_imput=str;
for(int i=0;i<=strLen;i++)
m_imput[i]=*p_imput++; //导入数据到buffer if((m_imput[3]!='-')||(m_imput[10]!='-')) //判断导入数据格式
{
m_str="请按照 ###-######-######格式输入";
m_lpszBuf=m_str;
return m_lpszBuf;
} for(index=0;index<50;index++)
{
f_Find=TRUE;
for(int search=0;search<3;search++)
{
if(table[index][search]!=m_imput[search])
{
f_Find=FALSE;
break;
}
}
if(TRUE==f_Find)
break;
}

switch(index)
{
case 0:
unsigned int length,width,thick;
m_str="PCB";
length=m_imput[4]*100+m_imput[5]*10+m_imput[6];
width =m_imput[7]*100+m_imput[8]*10+m_imput[9];
m_str+=length;
m_str+="*";
m_str+=width;
m_str+="*";
switch(m_imput[11])
{
case '0':
m_str+="0.4mm";
break;
case '1':
m_str+="0.6mm";
break;
case 2:
m_str+="0.8mm";
break;
case 3:
m_str+="1.0mm";
break;
case 4:
m_str+="1.2mm";
break;
case 5:
m_str+="1.6mm";
break;
case 6:
m_str+="2.0mm";
break;
default:
m_str="***-******-#板厚输入错误";
m_lpszBuf=m_str;
return m_lpszBuf; //返回字符串
}
break;
case 1:
m_str="IC";
break;
case 2:
m_str="三极管";
break;
case 3:
m_str="二极管";
break;
case 4:
m_str="电阻";
break;
case 5:
m_str="电容";
break;
case 6:
m_str="晶体";
break;
case 7:
m_str="Speaker/Buzzer";
break;
case 8:
m_str="线圈";
break;
case 9:
m_str="电池";
break;
case 10:
m_str="火牛";
break;
case 11:
m_str="LCD";
break;
case 12:
m_str="可控硅/晶閘管";
break;
case 13:
m_str="插座";
break;
case 14:
m_str="Fuse";
break;
case 15:
m_str="EL片";
break;
case 16:
m_str="LED";
break;
case 17:
m_str="斑马条";
break;
case 18:
m_str="开关";
break;
case 19:
m_str="线材/跳线";
break;
case 20:
m_str="马达";
break;
case 21:
m_str="电缆";
break;
case 22:
m_str="插槽";
break;
case 23:
m_str="电镀/喷油/丝印胶件";
break;
case 24:
m_str="胶件";
break;
case 25:
m_str="橡胶";
break;
case 26:
m_str="螺丝";
break;
case 27:
m_str="螺母";
break;
case 28:
m_str="电池片";
break;
case 29:
m_str="弹簧";
break;
case 30:
m_str="介子";
break;
case 31:
m_str="五金片";
break;
case 32:
m_str="光轴";
break;
case 33:
m_str="偏心轮";
break;
case 34:
m_str="贴纸";
break;
case 35:
m_str="说明书";
break;
case 36:
m_str="警告纸";
break;
case 37:
m_str="保养卡";
break;
case 38:
m_str="海报";
break;
case 39:
m_str="彩盒";
break;
case 40:
m_str="插卡";
break;
case 41:
m_str="平卡";
break;
case 42:
m_str="吸塑";
break;
case 43:
m_str="PE袋,发泡胶袋";
break;
case 44:
m_str="卡通箱";
break;
case 45:
m_str="雪梨纸";
break;
case 46:
m_str="发泡胶";
break;
case 47:
m_str="彩盒提手";
break;
case 48:
m_str="胶带";
break;
case 49:
m_str="海绵";
break;
case 50:
m_str="软件";
break;
default:
m_str="###-输入错误";
m_lpszBuf=m_str;
return m_lpszBuf; //返回字符串
} m_lpszBuf=m_str;
return m_lpszBuf; //返回字符串
}
以上是用VC6写的一个简单动态连接库的程序. 编译后DLL文件居然有一兆多. 太吓人了. 好象一加上
#include "Afx.H"这个包含头文件就大了. 怎么缩小DLL文件的大小?

解决方案 »

  1.   

    静态连接了mfc的dll吧,把它改成动态的
      

  2.   

    用upx,aspack等压缩一下.推荐使用nSpack,它的压缩比可以超过50%的,而且不用"解压".
      

  3.   

    用Release方式编译,再加一个压缩壳
      

  4.   

    1.用release编译一样大.没什么变化.
    2.我新建该dll工程时候.好像选择dll动态的.从哪里可以看出是动态还是静态的.另外如果原来是静态的.现在如何改成动态的?
    3. 用upx,aspack等压缩后. 被VB.调用是否还需要增加其他设置才能调用该dll ?
      

  5.   

    应该是链接了MFC库的原因,你的这个函数没有必要用MFC(选择规则DLL(不带MFC支持的那种))
      

  6.   

    非也. 我刚刚有试了下.重起个工程.选择单DLL. 不带MFC的那种.编译后还是1.26M.
    不信的话.哪位可以试着COPY到VC6.中去编译下看看.
      

  7.   

    加上#pragma comment(linker,"/OPT:nowin98")
    release版只有7k
      

  8.   

    1. Release调试生成一样大1.26M
    2. 加上#pragma comment(linker,"/OPT:nowin98"). Release版本也是1.26M
    3. 引用Tiny.h是怎么引用. 包含 "Tiny.h"吗? 包含编译出错.找不到该头文件.
    看来没办法了. 真搞不懂小小的DLL有这么大.比普通应用程序大的多.
      

  9.   

    我试了一下,debug1.2M release 88K,还是可以接受的..
    建的时候选win32 dynamic-link lib  an empty dll project
      

  10.   

    生成release后,再加压缩壳不就得了!
    100K可以压缩成30K左右。
      

  11.   

    to: 辉辉. 怎么我release后. dll大小还是1.26M ?
      

  12.   

    //下面的优化是段合并,不推荐使用,在很多程序里也许不能使用 
    #pragma comment(linker, "/OPT:NOWIN98") 
    #pragma comment(linker, "/SECTION:MiniPE,") //创建自定义的 MiniPE Section 
    #pragma comment(linker, "/MERGE:.data=MiniPE") //合并.data Section 到 MiniPE Section 
    #pragma comment(linker, "/MERGE:.text=MiniPE") //合并.text Section 到 MiniPE Section 
    #pragma comment(linker, "/MERGE:.rdata=MiniPE") //合并.rdata Section 到 MiniPE Section