非常郁闷非常郁闷,懂的朋友来看看,不懂的朋友来up,都有分

时间:2022-04-28 21:25:19
本来一个编译后25k的程序,加了个Variant的变量后,编译完变成73k,太离谱了吧?!!!

用CreateOleObject一定要用Variant吗?有懂的朋友来指点下,谢谢

55 个解决方案

#1


不懂~ up

#2


CreateOleObject是ComObj单元的方法

#3


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

#4


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

#5


UP

#6


up

#7


up

#8


up一下

#9


不懂,关注...

#10


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

#11


学习学习,Up

#12


up

#13


不懂,学习

#14


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

#15


up

#16


可以给代码让懂的给看看

#17


我没把Comobj单元引进来。

没声明Variant变量的时候编译以后是25k,一声明后就变73k了。

没有引用新的单元。

我自己剥离了一个Comobj2.pas,里面只有Createoleobject

声明OleVariant比Variant多0.5k,更郁闷

#18


把代码贴出来让大家帮我分析分析!!!!

#19


没人理?up一下!

#20


根本没代码,我只引用了windows这个单元。

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

#21


帮顶

#22


帮顶

#23


还是没人?

#24


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

#25


哦~~~,真的吗,可否分享一下代码吗!??

#26


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

#27




UP

#28


UP

#29


我是来up的

#30


路过,学习

#31


不明飞行物

#32


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

#33


to  happy00() : 就是不知道接口类型啊

比如CreateOleObject('outlook.application')

#34


UP

#35


UP

#36


真的没留意过

mark

#37


up

#38


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

#39


up

#40


to gdstyzh01(飞梭流金) :

我定义成IDispatch接口,可我并不知道outlook.application接口类型是什么,怎么定义啊??

#41


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

#42


我up一下,我现在正在学

#43


不懂 UP UP UP~

#44


学习

#45


UP

#46


不懂,关注...

#47


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

#48


up

#49


to LuYang(爱心):

根本没使用variants单元。

不过应该是编译的时候编译器把System单元一起编译进来了。

#50


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

#1


不懂~ up

#2


CreateOleObject是ComObj单元的方法

#3


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

#4


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

#5


UP

#6


up

#7


up

#8


up一下

#9


不懂,关注...

#10


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

#11


学习学习,Up

#12


up

#13


不懂,学习

#14


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

#15


up

#16


可以给代码让懂的给看看

#17


我没把Comobj单元引进来。

没声明Variant变量的时候编译以后是25k,一声明后就变73k了。

没有引用新的单元。

我自己剥离了一个Comobj2.pas,里面只有Createoleobject

声明OleVariant比Variant多0.5k,更郁闷

#18


把代码贴出来让大家帮我分析分析!!!!

#19


没人理?up一下!

#20


根本没代码,我只引用了windows这个单元。

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

#21


帮顶

#22


帮顶

#23


还是没人?

#24


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

#25


哦~~~,真的吗,可否分享一下代码吗!??

#26


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

#27




UP

#28


UP

#29


我是来up的

#30


路过,学习

#31


不明飞行物

#32


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

#33


to  happy00() : 就是不知道接口类型啊

比如CreateOleObject('outlook.application')

#34


UP

#35


UP

#36


真的没留意过

mark

#37


up

#38


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

#39


up

#40


to gdstyzh01(飞梭流金) :

我定义成IDispatch接口,可我并不知道outlook.application接口类型是什么,怎么定义啊??

#41


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

#42


我up一下,我现在正在学

#43


不懂 UP UP UP~

#44


学习

#45


UP

#46


不懂,关注...

#47


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

#48


up

#49


to LuYang(爱心):

根本没使用variants单元。

不过应该是编译的时候编译器把System单元一起编译进来了。

#50


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