COM+组件如何同时为delphi和asp重用?(100分)

  • 主题发起人 goldenforest75
  • 开始时间
to Hongjiang:
给你发了邮件,DELPHI做的组件和VB做的调用程序都在附件里,希望得到你的指教!
 
lipingcool:
你给我的文件好象是中文名的, 我在存盘时出错,
保存不了, 你给我用英文再发一次.
 
Hi, liping:
你的问题在于你在Delphi的TypeLib Editor中GetRS的返回值类型设错了,
你将之设成了IDispatch*是不对的, 应该是HRESULT;
然后你再在GetRS
的Parameter栏里按如下定义:
name - 随便什么都可
type - IDispatch**
最后一栏设为 [out, retval]
接着按TypeLib Editor的更新代码按钮同步你的source code, 编译, 注册
你的ComServer等等, 一切都会正常了.
 
to Hongjiang:
很感谢你的帮助,按照你的方法,我终于可以用VB来进行调用了,但还有几个问
题不太清楚:
1。你给的方法中,函数的返回类型为HRESULT,为什么我的那种方法不行呢?
2。按照我的理解,在VB中Set com_rs = delphi_rs.GetRS,则 com_rs得到的应
该是HRESULT类型,为什么能得到OUT retval参数的值?是否定义为retval以后,
则返回的就是这个参数的数据类型,而和HRESULT无关?
3。IDispatch 是一个什么样的数据类型?在VB里它的表示好象变成了OBJECT?我
看很多示例上都用到它,它好象是从IUnknown中继承下来并添加了四个方法。
 
难道在写三层时,全用ADO的原生接口吗?这样做是不是太累?
 
lipingcool:
关于你问的几个问题,其实是COM的几个最基本的东西,但是要说清楚还是
要费很多时间。简单地说,通常COM对象的接口方法的返回值是HRESULT,它表
明了这个方法调用的成功与否,而你想要返回的数据是通过定义成[out,retval]。
你在VB里看到的是COM Runtime为你处理过了的,比如你的GetRS方法中如果出错,
GetRS的HRESULT将不为S_OK, 那么在VB中将会产生一个Exception(VB的Error)。
IDispatch是从IUnknown上继承下来,主要是给ASP等需要运行时Binding的语言用
的,因为这种情况下无法用基于vtbl的Binding,通过IDispatch的Invoke方法来调
用,等等......关于这个话题要讲的话可以写本书了,建议你去找本书看。总的来
说, MTS/COM+比J2EE学习起来要复杂一些, 但在Windows平台上MTS/COM+比J2EE
要快。

zljzyj:
写三层/多层应用很多情况下要用多种技术, 根据需要而定, 有时用ADO, 有时用
XML或其他的技术, 没有什么累不累的, 要不累的话只有不做这一行了。
 
发封信到wrlmmmp@263.net,
我这里有个delphi写的com组件返回recordset的试验性质的小程序,
可以发给你。
 
to 小猪:我已经发给你mail了
to 大家:有一VB程序员说有一个连接组件对外提供Connection接口,其余组件的RecordSet全
连接到此组件的Connection,也就是共用一个连接,可以这样做吗?有必要吗?
 
我试着想返回Connecton接口,但是出现如下错误:
Declaration of 'ConnObj' differs from declaration in interface 'IComCon';
该如何解决?
 
用ADO的原生接口,当客户方申请数据时,中间层提供其RS,当客户方当修改了一批数据时,
客户要自己组织SQL语句(也许是几条SQL语句)向中间层提交。删除新增全如此是吗?
 
zljzyj:
通常Middle-Tier提供的是Business Service而不应该是赤裸的Recordset,
如果对数据(Business Entity)的修改都直接由客户端做的话,Multi-Tier
的优点一点都没有了,直接用C/S结构算了.
 
To HOngJiang:如果我想的不行,能不能麻烦你告诉我怎样做才行。我万分着急,在这我表
12万分的感谢。
 
zljzyj:
我连你想做什么都不知道, 我能告诉你什么?
 
to HongJiang:有QQ吗?或是E_mail,我想向你学习一下。如何?
 
我的QQ为:26504152
 
zljzyj:
QQ? ICQ? 5年前用过, 现在我只用Yahoo Messager, 我的
Email上面已经写了. 你有兴趣的话可以一起讨论讨论.
 
请问Type Library 中声明的[out,retval]变量在程序中有什么作用,只是仅仅将其定义为
一个function?
请哪位指点一下载type Library中声明的新接口(不是Delphi默认的IAppserver接口),
如何在客户端调用。
请推荐学习Delphi关于Com编程的好书。
 
to HongJIang: 请到下面的问题领分:
"关于COM?请大家帮忙 作者:zljzyj"
 
顶部