IMemoApp = interface;
IMemoAppDisp = dispinterface;//dispinterface和interface有什么不同,我
//试着换了换, 用控制器调用时效果一样啊?why?做多层的时候就不同了,不信你用TSocketConnection连接,再这样转换:
var
IMemo: IMemoApp;
IMemoDisp: IMemoAppDisp;
begin
IMemo := IMemoApp(IDispatch(SocketConnection1.AppServer));
IMemo.MyMethod;// 错误 IMemoDisp := IMemoAppDisp(IDispatch(SocketConnection1.AppServer));
IMemoDisp.MyMethod; //正确
end;
IMemoAppDisp = dispinterface;//dispinterface和interface有什么不同,我
//试着换了换, 用控制器调用时效果一样啊?why?做多层的时候就不同了,不信你用TSocketConnection连接,再这样转换:
var
IMemo: IMemoApp;
IMemoDisp: IMemoAppDisp;
begin
IMemo := IMemoApp(IDispatch(SocketConnection1.AppServer));
IMemo.MyMethod;// 错误 IMemoDisp := IMemoAppDisp(IDispatch(SocketConnection1.AppServer));
IMemoDisp.MyMethod; //正确
end;
解决方案 »
- 关于Delphi中TreeView的节点前能否加CheckBox的问题
- 饭桶,向你请教个问题!!!(非请勿入)
- 如何在delphi中通过串口实现IC卡与计算机通信 急!!!
- 时间控件问题
- 求助关于窗口的制作方法!
- 数据库备份程序出错了,
- 输入一个年度,得出该年每月的起始日和终止日。??
- 请问谁知道 换肤控件SkinEngine Version 3.4.5在那里有下载?
- 关于在delphi中用嵌入汇编取出cpu序列号的问题
- 怎样在程序运行中屏蔽鼠标单击事件?
- 关于主键的问题
- win2000下开发的程序,在Win98下运行,见面全部变样,就象在800*600下开发的,到600*480下运行一样,控件全部变大了,而且Form等全部出来滚动条……
b: dispinterface
我的理解是:
1 通常b用来定义Automation对象,a适用面更广,但
一般不用在COM对象上,copy_paste讲的是这种情况
2 a是从接口祖先IUnknown继承下来的,用户自定义接口时用得较多,
而b一般产生于定义COM时的自动生成代码中
另外,a的定义中可以有过程或函数,但不能定义属性,而b可以包含Fields。
IMemoAppDisp = dispinterface;//dispinterface和interface有什么不同,我
//试着换了换, 用控制器调用时效果一样啊?why?
========================
interface 实现自定义接口(??我猜的)
dispinterface 实现IDispatch接口
旺财 讲的有道理
late-binding也要调用getid...()然后才调用invoke(),而dispinterface运行时不调用getid..(),interface在编译时要知道服务器的tlb,编译时就检查语法