非常郁闷非常郁闷,懂的朋友来看看,不懂的朋友来up,都有分 ( 积分: 200 )

  • 主题发起人 主题发起人 DieGhost
  • 开始时间 开始时间
D

DieGhost

Unregistered / Unconfirmed
GUEST, unregistred user!
本来一个编译后25k的程序,加了个Variant的变量后,编译完变成73k,太离谱了吧?!!!

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

用CreateOleObject一定要用Variant或者OleVariant吗?有懂的朋友来指点下,谢谢
 
有什么奇怪的,因为你引用了新的单元
 
function CreateOleObject(const ClassName: string): IDispatch;
它返回的是你所创建对象的接口。
在COM+中,接口中定义的方法,数据包的传递一般都用OleVariant变量。
因为变体类型有足够大,他本身是一块内存地址。用其他变量可能会发生溢出的可能
UnderStand!!!
 
你去看看Variant或者OleVariant的定义就知道了,怎么能不多占空间的呢。否则大家都用固定的变量类型了。
 
有固定变量类型吗?
比如我用CreateOleobject('outlook.application')
 
up一下................................
 
Variant是这样的!
 
Variants单元里面这么多常量定义当然会把体积搞大了
 
to islet8:我沒引用Variants单元啊
 
不是Variants单元的问题,是System单元的问题。
而且System单元是隐式关联的(不在uses中出现),只要编译器发现你使用了variant类型就会自动把该单元编译进去,这样编译出来的文件就变大了。而且这时候你可能没有在uses中增加内容,所以感觉上会是很莫明其妙的。
如果你在variant类型上按右键查看Find Declaration就可以打开System单元,但是在该单元中并不能找到variant类型的定义——这说明variant的定义是封装在编译器内部了的。
原理就是这样,至于有没有变通的方法来解决你的问题,据我所知目前是没有的。
 
o,,可是我显式的use System仍然没有体积变化。。怎么解释?
另外,既然是编译器直接支持的variant类型,那隐式的关联有什么必要了?
 
没话说,听课
 
说的够清楚了,还不清楚的话可以打开System.pas,仔细看看Borland写在注释中的说明文字。
 
受益中。。。。。。。。
 
to younghat: 我的想法和你一样,我也打开System单元看了,的确如此。 请问有解决办法吗?我不想用Variant. 可找不到接口类型
 
73K 很小的啊!没有什么吗?
 
后退
顶部