本来一个编译后25k的程序,加了个Variant的变量后,编译完变成73k,太离谱了吧?!!!用CreateOleObject一定要用Variant吗?有懂的朋友来指点下,谢谢

解决方案 »

  1.   

    CreateOleObject是ComObj单元的方法
      

  2.   

    写把数据导入excel、word的程序时,一般是用到了Variant
      

  3.   

    在定义、创建ole对象时用到了吧
      

  4.   

    自动化对象可以使用OleVariant来试试,看大小如何。当然也得引用ComObj单元。其实COM本身就很大,用ATL做COM也是一样很大的。如何你使用静态编译文件的话,本身就有几百K,多出几十K也不会显得多大的。你还可以用可执行文件压缩工具来来对它压缩,还能小点。你还可以对ComObj来进行定制,把不需要的都删掉,即定制内核。也许还有别的办法大家一起来讨论。
      

  5.   

    Variant需要引用单元,你看看USES那里是不是多了单元了。
      

  6.   

    我没把Comobj单元引进来。没声明Variant变量的时候编译以后是25k,一声明后就变73k了。没有引用新的单元。我自己剥离了一个Comobj2.pas,里面只有Createoleobject声明OleVariant比Variant多0.5k,更郁闷
      

  7.   

    根本没代码,我只引用了windows这个单元。然后声明变量
    var
      x:variant;
    以后编译出来就大了很多,原因我也知道
    看了Variant和OleVariant的定义
    它们本身是一块内存地址。因为要求变体类型有足够大,用其他变量可能会发生溢出
      

  8.   

    还有更怪的呢,
    本来一个程序编完8M多。
    后来改bug,加了两句话,编完后只胜4M了。
      

  9.   

    不一定,你也可以声明为借口然后用Co---.create创建,也可以用派遣借口,以disp结尾的借口调用
    这些东西都是自动化服务器自动生成的,如果不知道接口类型,可以用variant调用。
      

  10.   

    大哥,这一点点体积算什么?使用COM肯定要用OleVariant、Varint什么的。
    怎么现在还在为这个烦?
      

  11.   

    to  happy00() : 就是不知道接口类型啊比如CreateOleObject('outlook.application')
      

  12.   

    windows定义了十几种类型的数据可以跨平台传递(例如可以在VC和delphi的程序里传递),variant只是一种特殊的类型
    我的思路:楼主如果确定自己要用的数据类型,并且该数据类型不会发生变化的话,试下用其他明确的类型而不要用variant
      

  13.   

    to gdstyzh01(飞梭流金) :我定义成IDispatch接口,可我并不知道outlook.application接口类型是什么,怎么定义啊??
      

  14.   

    咱不是很懂。OLE应该属于COM组件,而COM组件在脚本语言应用时总会将变量默认为Variant变量。我觉得可以看一下相关的资料。帮忙顶
      

  15.   

    当你使用了variant以后, 在编译时需要多添加一个variants的unit,自然是会添加你的程序大小了.
      

  16.   

    to LuYang(爱心):根本没使用variants单元。不过应该是编译的时候编译器把System单元一起编译进来了。
      

  17.   

    outlook.application接口是什么我也不清楚,因为没碰过,你可以上网看看有没有相关资料,还有帮助文档
      

  18.   

    to  e5022(helpid):用无类型指针?有相关资料吗?