<font size=5>用COM的尴尬!</font>(150分)

  • 主题发起人 主题发起人 吴剑明
  • 开始时间 开始时间

吴剑明

Unregistered / Unconfirmed
GUEST, unregistred user!
1 本想开发一个COM,在里面封装ADO,给个查询的方法,让人家去调用就行了。
结果人家调用是能调用了,但是返回的结果集不能直接放到如;DBGRID之类的
控件中去,结果用起来十分麻烦。不知各位大虾是如何解决这个问题的?
2 用惯了用INTERDEV来使用DELPHI开发的COM。试了下用DELPHI来调用COM,发现
很奇怪啊。所有的属性都是这样的:
取值: a := Get_属性名
付值: Set_属性名(value)
全是这样的!而不是象DELPHI的语法:
取值: a := 属性名
付值: 属性名 := a
难道COM就是这样的吗? 拿去给单位的DELPHI程序员来用的话,他们会很不习惯的。:(

 
1、肯定是可以的。
2、Delphi里写控件的习惯就是这样的。
 
本地放一个TClientDataSet,例如:ClientDataSet1
服务端放一个TTable和TProvider写一个方法来导出数据:
function TServer.GetData:Olevarient;
begin
Result := Provider1.Data;
SetComplete;
end;
客户端使用:ClientData1.Data := ObjServer.GetData;来获取数据。
ObjServer是TServer的接口。
 
通常,在下面还应该有属性声明:
property 属性名:类型 read Get_属性名 write Set_属性名;
所以使用起来应该是一样的。如果引入的_TLB中没有自动声明,就手动加上吧。
 
老吴:
1. 用ClientDataSet嘛,RDM也是DCOM对象,在RDM中加方法嘛
2. 我看到 COM 中属性都是 Get_xxx 和 Set_xxx
 
2.对象中的属性都是用get,set的。
 
各位可能还没看明白。
象在DELPHI里用对象的属性,调用时都是:
a := object.XXX
object.xx := b
但调用了COM后,却是:
a := object.get_xxx
object.set_xxx(param)
但我在COM里申明时,是没有SET、GET的。
我用INTERDEV调用时,也不用什么SET、GET的。不知为何
CathyEagle :你是如何把COM里的RECORDSET返回到DBGRID的? 请教
 
1、可以用数组来传递结果;
2、这是标准的oop风格,不能直接访问对象的属性,必须通过方法(函数)来访问。
 
也许和我这个问题有类似之处:
<a href="DispQ.asp?LID=213615">拥有TDataSource属性的Delphi控件怎样转换成 ActiveX ? (From: BaKuBaKu)</a>
 
一点也不同。:)
 
老吴你能回答我的问题吗?
 
TTest = Class
a: String;
..
perivate
procedure Get_A;
Procedure Set_A(const A: String);
property
AA: String;
write Set A, read Get_A;
Delphi就是这么用的。
 
第一个问题没人回答。。。
 
2/老吴,我也很想学学delphi编写com的知识,你有这方面的资料或者例子给我吗?
 
>>第一个问题没人回答。。。
我不懂的是,你的程序是封装了ado的使用方法,还是封装了ado驱动,我想应该是
ado方法把,但这样的话,对方还是要装ado驱动,可是如果装了ado的驱动,好象
就已经可以直接在程序中使用ado对象了,还用你封装他干吗
2。bcb就必须这么用,如果对方是bcb程序员就会感到很习惯的,呵呵
 
wangxd : 封装了ADO的某些方法。
 
多人接受答案了。
 
后退
顶部