(400分)我们行业有个大型软件,提供ACtivex控件进行二次开发,源码是VC的,如何才能转成delphi的 (100分)

Z

zhksoft

Unregistered / Unconfirmed
GUEST, unregistred user!
我们行业有个大型软件,提供ACtivex控件对核心程序进行控制,这样在进行二次开发时,只要开发控件就行了,让控件调用核心程序执行一些本地化的一些操作。核心程序是VC开发的,控件提供了VC源码。但我不会VC,想用DELPHI来开发这个控件,我试着将VC做出来的ocx加到delphi工程里,也能看到控件的窗体,就是不知道如何对控件操作,让它来控制核心程序。开发这个核心程序的人说,VB编写的控件无法与核心程序连接,因为其ClsID不固定。只能用VC++开发,而DELPHI他说要向核心程序发送一个ReadDataFromControl事件, 请教各位FW:
1、VC源码编的控件能不能转成DELPHI的。如能,怎么转??
2、如问题所述,如何向一个程序发送ReadDataFromControl事件???
暂放100分,如有人完美解决了问题,我再送300分(刚注册,只赚到400分)
 
大家多帮忙,能提供思路、ACtivex例程,ACtivex电子书也行呀!!!
 
to piao40993470
ocx与DLL有什么关系?
clsid={0B940947-0564-4304-A6C5-2CD32A093570}是不是OCX与DLL之间的连接接口??

 
你最好用VC写个DLL来调用他
在Delphi来使用DLL
 
to ycxy
软件发布了一个dll,但我不知道是不是针对这个控件的dll,另外dll里可以保存窗体吗???
 
dll当然可以用窗体
不过体积就很大
 
DLL可以在delphi导出为*.pas吗??
 
能发给我用一用吗????
我很好奇呢,说不定会对你有帮助呢~
呵呵~~~~~~~~~~~~~~~~~~
妹妹:netsofte_mail@163.com
 
对于ocx是对ActiveX控件类型封装后的文件,而且现在我发现dll也能实现类似的功能,特别是ActiveX Library和Activ Form做出来的一个是dll一个是ocx但都可以通过javascript用同样的方法调用。
而dll可以是动态链接库(不需要注册),也可以是COM组件库甚至可以是ActiveX Library。
clsid={0B940947-0564-4304-A6C5-2CD32A093570}是用来唯一的标识一个接口、控件类或者其它实体。是为了方便系统程序调用的,也就是说当控件注册后,其它的应用程序不需要知道.ocx和.dll在哪里,直接通过接口就可以访问它的方法和属性。当然ocx可以调用dll中的方法,dll也可以调用ocx中的控件和方法
((这都是自己理解的若有不正确的欢迎指正
你的问题:
1.VC编写的ocx或者dll可以直接用delphi调用,只不过编写的时候注意用它们相互兼容的数据类型。
2.如你所述要对ocx控件的操作需要知道控件所提供的方法才行的,如果你是通过Project->Import Type Library导入的你可以找找C:/Program Files/Borland/Delphi6/Imports里对应的*_tlb.pas文件,在你要调用的unit中uses它,就可以直接使用其方法了。

 
piao40993470说得有道理,呵呵。
 
确实很有道理呀,
不过对这个问题有什么帮助呢,
也许很多人都知道这个道理呀,
当务之急搞定本问题才是上策,

>> VC源码编的控件能不能转成DELPHI的。
当然可以啦,不过大都是用了InterFace的。我认为还是不够透明,操作不是很方便。
至于你后面的那个ReadDataFromControl我根本没有接触到,
它在哪个PAS文件或DLL文件里呢???我真想看看代码,
呵呵~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
我使用VC写的ocx时并没有用到什么ReadDataFromControl,你也要了解一下这个方法是ocx提供的还是别的什么?首先要用厂商提供的ocx,他们肯定提供了相关接口函数的使用说明,不然你也无法使用,除非瞎猜(估计没这么好猜的)。((算了,举个例子吧。
相信你的机子也可以播放flash吧。你可以从Project->Import Type Library中找到ShockwaveFlashObjects或者直接从C:/WINNT/system32/Macromed/Flash/Flash.ocx
-->Create Unitd在C:/Program Files/Borland/Delphi6/Imports生成ShockwaveFlashObjects_TLB.pas然后新建个Application加入单元ShockwaveFlashObjects_tlb;加入个Button在它的click代码用如下代码:
procedure TForm1.Button1Click(Sender: TObject);
var SFlash:TShockwaveFlash

//可以在ShockwaveFlashObjects_TLB.pas中找到对应的申明
begin
SFlash:=TShockwaveFlash.Create(Self);
SFlash.ParentWindow:=Form1.Handle;
SFlash.Movie:='C:/Downloads/mgs2.swf';
SFlash.Play;
end;
这是个显示调用ocx的简单例子,利用delphi提供的导入功能生成*_tlb.pas文件,里面有对ocx里方法函数的申明(当然要使用它们就要了解其具体的用法,猜是猜不出来的)。
你也可以仔细看看ShockwaveFlashObjects_TLB.pas里面有对TShockwaveFlash;的申明,还有例如play,stop,movie,Rewind....方法的申明。((再不明白我也无语了
 
是呀,OCX或DLL什么的导出来后有很多是InterFace呀,
不然我们真的要“发财”咯--------不过写什么代码,MS或别人的ActiveX控件都变成PAS文件,方法、事件什么都是pasical咯。这能行吗???
没办法的啦,等MS收购Borland以后,盖茨想自毁前程了再说,别忘了我们都是用的API呀,
呵呵~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
谢谢大家支持,等问题解决我会信守诚诺的。
to piao40993470
clsid={0B940947-0564-4304-A6C5-2CD32A093570}在编程中有什么作用吗?
 
其实它只是接口的标识,或者理解为标识某个ocx或者dll文件的一串东东。
看看*_tlb.pas的源码吧,
IShockwaveFlash = interface(IDispatch)
['{D27CDB6C-AE6D-11CF-96B8-444553540000}']
function Get_ReadyState: Integer
safecall;
....
通过{D27CDB6C-AE6D-11CF-96B8-444553540000}把.ocx或者.dll中的函数方法给申明出来。
具体的语法含义我也没有研究过,只是泛泛的理解了一下。
举个实用例子方便理解:
  用delphi写个activeform然后把对应的ocx注册,然后通过网页调用ocx封装的方法或者函数。
<OBJECT id="mysimaplename"
classid="clsid:0736F5AE-1CEB-4B4F-97EA-66623316FDB8"
codebase="http://10.1.2.167/MyProject/simaple.ocx"
width=400
height=240
align=center
hspace=0
vspace=0
>
在javascript的函数中就可以直接引用mysimaplename.visible=true;来控制activeform的的显示与隐藏了。
 
最近较忙,有段时间没来DFW了,谢谢Netsoft
netwatch
piao40993470
ycxy
等朋友的帮忙,我现在不没时间调试,但感谢大家,稍后我会结贴。
大家有没有ACtivex例程,ACtivex电子书,给介绍一下下载的地方呀!!!
另ReadDataFromControl我想不是系统函数,可能控件的一个函数。
 问题得不到解决是因为我了解的太少,再次感谢大家的热心帮助。尤其是piao40993470
方便的话请留下邮箱地址,以后联系。
 
email:xbpiao@msn.com
或直接上Q40993470或者上网易泡泡piao40993470或msn都可以找到我。(正常上班时候都在网上混,同时欢迎更多的朋友一起讨论技术问题。
 
我有将C++转换为DELPHI代码的工具,如果要,请留给我发一封E_MAIL,我的MAIL是RedLeaf_WGM@163.COM
 
to piao40993470
你可真幸福呀,我是只能一周上一次网,有时还不能保证,因为我的单位在农村呀,
太苦了。
 
没人跟贴了,结帐!!!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部