VLC控件转化为ActiveX控件后为何丢失了所有PUBLIC下的procedure?求救。。。((100分)

  • 主题发起人 主题发起人 bluefoam
  • 开始时间 开始时间
B

bluefoam

Unregistered / Unconfirmed
GUEST, unregistred user!
1。最近得到一DELPHI 制作的控件(关于视频采集,VFW)(有.pas原代码),安装到
DELPHI中以后,出现在VCL中,可以正常使用所有的属性方法,使用ActiveX Control向导,
将VCL控件转化为ActiveX控件后,再次将新的ActiveX控件装入DELPHI,发现所有的公有
的函数,过程都不见了。只能算是一个空壳而已。
书上说:使用ActiveX Control向导可以很方便的将VCL控件转化为ActiveX控件,可结果
确是如此,实在不明白是怎么回事。
2。本人急需在VC++下使用视频采集捕获的控件,刚才的转化失败,使得我不得不去学
习WINDOWS API ,可我实在是没多少精力,只是想在程序中应用该采集而已。
望各位大虾指点一二。如有VC++下使用的视频采集捕获控件,请与我联系!谢谢
 
急!!!HELP!!
 
ActiveX的函数和过程都是需要输出才能用的,在以 _TLB 结尾的单元中加入。
 
最最可能的是你的Delphi的方法和事件使用了自动化不兼容的类型的参数比如TRect这种数据类型没有
对应的Automation兼容的数据类型。Wizard是不会转化这种方法过程的:((
Automation只支持很简单的一些数据类型作为方法过程的参数,比如smallint,integer,single,currency,
tdatetime,widestring,idispatch,wordbool,variant,byte,iunknown等
还有可能就是ActiveX是不支持对象引用的属性的,比如TTable的Datasource属性

我给你的忠告就是改写全部不兼容的方法和过程和属性(好象和重写没什么两样,呵呵),
还有你看看用Type library editor进行修改会不会有些帮助,有人说可以通过它对Automation
不支持的数据类型进行marshall,我没仔细研究过,不敢乱说。

总之VCL支持了太多的高级特性,使得VCL和ActiveX很多方面的差异是很难调和的,除非当初写VCL时
就考虑到了要和ActiveX兼容。我认为borland宣称VCL可以很容易的转化为ActiveX控件的这句话纯属
放屁,呵呵
 
非也,很简单的。

在 Type Library 里一个个添加上一些属性或方法。可以有参数,可以无参数。
这要看你原来的来定。
如 原来的 Procedure Init(A:Integer);
就新建 Method InitAX(Value:Integer); 然后在 该方法的实现里直接调用原来的。

而 原来的 Function GetSomeValue:Integer;
就新建只读属性 Property SomeValueAX:Integer
刷新后就自动产生 Get_SomeValueAX:Integer;
你在里面写上 Result:=GetSomeValue;

依次类推.....


 
实在是太好了,原本拖了半个月的事情半个小时就解决了,谢谢各位!
来瓜“分”了 8)
 

Similar threads

S
回复
0
查看
896
SUNSTONE的Delphi笔记
S
S
回复
0
查看
873
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部