with (w as IInterface) do
begin end;or
with IInterface(w) do
begin end;
begin end;or
with IInterface(w) do
begin end;
解决方案 »
- 如何在delphi 7 中实现flash背景的透明或者运行一段时间,让flash动画隐藏?
- 倾家荡产!!!Ehlib的dbdatetimeediteh的类型转换错误解决办法征集
- 【求助】鉴于小弟编程功底粗略,备受技术限制,特散分拜师或寻一有益QQ讨论群
- 急,数据库问题
- DELPHI打开我程序里的一个PAS文件,再关闭那文件,DELPHI就死了
- 十万火急!请教高手!
- 请问在delphi下用那种控件做报表比较方便?第三方的控件也可?
- 请教各位:为什么不能访问sysobjects等系统表的“name”字段?
- 还是串口通讯和格式转换(分数嫌少,可以加,直到把我的用分1000分用完)
- 问个简单的问题
- access数据的通配符是??
- cgi中为什么一访问ADO就出错?
begin end;
begin
hi := 'hi,this is me';
end;procedure TForm1.Button1Click(Sender: TObject);
var
imp: TMyImp;
w: variant;
ss: IMyInterface;
begin
imp := TMyImp.Create;
ss := imp;
w := ss;
with TObject(w) as IInterface do
begin end;
end;end.
或者,再w:=ss前,把W转换一下Iinterface(w).
你提到的第一种方法和我用的方法其实是一样的。其结果编译器还是报错。第二种方法我试了,可以行得通。在此先致谢!
只是有一个问题始终困扰着我:按照AS的语法定义当把一个interface reference放入一个variant变量以后可以用AS来动态地转换到原来的interface类型。为何在这里却不行?而且在Borland的帮助里有这么一个例子with MyConnection.AppServer as IMyAppServer do
SpecialMethod(x,y);
它可以用来获得early binding的效果。我的这个问题其实就是在写一个三层应用时碰到的。为了改善效率我希望能够进行early bind,但在我用上述方法后,编译报错,情况如出一辙。
在Dephi的帮助文档中有一段关于as的说明:
Object as interface
where Object is an expression of an interface or variant type or denotes an instance of a class that implements an interface.
我想哪怕是要的类型在动态转换中不存在的,Delphi也只会抛出异常,而不会在编译时报错。
或许是我领会错了也未可知。