三层结构中应用服务器如何调用其他模块的方法?
我的应用服务器(remote date module)
在一个模块中的建立的方法,如何在其他模块中调用他。
好像自动创建后,仍然不能在其他模块调用?
请问如何实现?
我的应用服务器(remote date module)
在一个模块中的建立的方法,如何在其他模块中调用他。
好像自动创建后,仍然不能在其他模块调用?
请问如何实现?
解决方案 »
- TTreeView,如何做到点击+时不触发OnChange事件,只有在点击节点时才触发
- SOS----在线急等,关于串口接收数据时,中间有空格的问题!
- Delphi的第三方控件
- ★★如何截获窗体最小化时标题栏重画的消息?
- 急!程序都要用了,突然发现只能保存为*.qrp
- 报表打印分页问题QuickRep1.NewPage出错,为什么呀?
- 怎样让子窗口在程序一运行就停泊在指定的地方?
- 安装了RXLIB控件了还是提示找不到文件
- 遍历系统进程问题 DELPHI+W2k 在线等待
- 用delphi怎么样操作注册表?(为什么没人理我55555555~~~~~)
- [Fatal Error] dclusr.dpk(41): File not found: 'FolderDialog.dcu'
- 关于客户端如何远程递交数据??数据库在Internet上??
begin
form2.function1(param1);
end;
在引用的方法前加上该方法所属对象。
base.proc1
fun.proc2
client:
dcom.servername:=server.base;
如何调用通过dcom来调用fun.proc2?
dcomconn.appserver.method(p);
但是我发现这样不能返回数据集。我正在问答案。
不是很明白你的意思,其他模块指的是:1.客户端? 2.remote date module?
3.还是服务器的主界面?
客户端调用很简单,dcom.appserver.Yourmethod;
同在remote date module里面直接调用就好了,而在服务器的其他单元是
不能调用的.
比较保险的做法是在类库编辑器界面上声明,这样他自动生产的
代码比较放心.To : gdh_zj(Aris_go)
要带返回值的方法,返回参数要是指针类型.
@@@@@@@@@@@@@@@@@@@@@@@@@@@
base.proc1
fun.proc2
client:
dcom.servername:=server.base;在 base type library 中导出
read only property
Fun :IFun;
save 后会在 base 中出现
function TBase.Get_Fun: IFun;
begin
1. 可以在 base 上放一个 DCOM connection 连接 fun, 建立一个 remote 的 fun, 代码如下
result := DCOMConnection.AppServer As IFun;2. 也可以调用 CreateCOMObject 建立一个 in-process 的 fun, 小心你要在 base 用一个 OleVariant 变量存建立后的 fun, 要不然它会自动释放,因为
OleVariant 生存期结束, 代码如下
Base.Create 时写到
begin
OleFun := CreateCOMObject(ProgIDToClassID('xxx.Fun'));
end;在 Get_Fun 中写到
result := OleFun As IFun;3. 最好的办法是写一个 pooler(数组) 存放用 1 or 2 建立好的 fun, 在之间找个空闲的 fun 返回, 这个太麻烦 500 - 1000 行之间, 偶的 622 行实现
end;server ok
在客户机调用 func 请写到var
FunServer :OleVariant;
begin
FunServer := DCOMConnection1.AppServer.Fun; FunServer.{your method}
end;
嘻嘻嘻,方法多多;
你在类型库里声明的话,那么你可以将这个单元文件(功能实现部分)另写一个单元,同时也可以放在RDM里边,但是调用的话,也有多种方法,可以通过RDM调用,也可以在客户端声明接口直接调用;result := DCOMConnection.AppServer As IFun;哈哈,还有,用OLEVariant也可以直接调用
delphi6中一个例子(\midas\shareconn)。谢谢comanche(太可怕) 。