Chr*_*ase 4 delphi interface delphi-7
这应该是一个简单的答案,我相信它将是一个不,
但从一个更大的项目,我有一个接口和程序
iMyUnknown= interface(IInterface)
['..GUID..']
end;
procedure WorkObject(iObj :iMyUnknown);
Run Code Online (Sandbox Code Playgroud)
我知道这很有效
var
MyUnknown : iMyUnknown;
begin
if supports(obj, iMyUnknown, MyUnknown) then
WorkObject(MyUnknown);
Run Code Online (Sandbox Code Playgroud)
但有可能做这样的事情吗?
if supports(obj, iMyUnknown) then
WorkObject(obj as iMyUnknown);
Run Code Online (Sandbox Code Playgroud)
你为什么要演员?
如果obj支持接口,那么您需要做的就是在将它传递给过程之前检查它,您可以简单地传递对象本身.编译器将负责其余的工作.如果要访问接口的方法,则只需要Supports调用上的第三个参数.
编译并运行下面的代码.它应该编译没有错误,并为您提供一个控制台窗口和一个对话框消息.
program Project1;
{$APPTYPE CONSOLE}
uses
Classes
, Dialogs
, SysUtils
;
type
iMyUnknown = interface(IInterface)
['{DA867EBA-8213-4A91-8E03-1AACA150CE77}']
procedure DoSomething;
end;
TMuster = class(TInterfacedObject, iMyUnknown)
procedure DoSomething;
end;
procedure WorkObject(iObj: iMyUnknown);
begin
if Assigned(iObj) then ShowMessage('Got something');
end;
{ TMuster }
procedure TMuster.DoSomething;
begin
beep;
end;
var
obj: TMuster;
begin
try
obj := TMuster.Create;
if Supports(obj, iMyUnknown) then
WorkObject(obj);
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
Run Code Online (Sandbox Code Playgroud)