接口中的方法不是要通过过类来实现吗?可是我怎么在delphi中只看到定义接口,没有发现delphi通过类来实现,而我也用得好好的?别见笑..进来瞧瞧..(100

  • 主题发起人 主题发起人 youou
  • 开始时间 开始时间
Y

youou

Unregistered / Unconfirmed
GUEST, unregistred user!
接口中的方法不是要通过过类来实现吗?可是我怎么在delphi中只看到定义接口,没有发现delphi通过类来实现,而我也用得好好的?别见笑..进来瞧瞧..(100分)<br />比如在这个ShlObj单元中..
定义了好多接口...我都没有看到他的实现..

而我们在用的时候就要以这样:
use ShlObj;
function CreateLink( AsAppName : String ; AsCmdLine : string ;
AsShortcutName : string ;
AsDescription : string ) : boolean ;
IfUnknown : IUnknown ;
IfShellLnk : IShellLink ;
IfPersistFile : IPersistFile;
sFileName : String ;
sFilePath : string ;
sLnkExt : string ;
sDirectory : String ;
WsFileName : WideString;
Reg : TRegIniFile;
begin
result := true ;
//create a com object
IfUnknown := CreateComObject(CLSID_ShellLink);
// cast the IUnknown interface to a IShellLink
IfShellLnk := IfUnknown as IShellLink;
// cast the IUnknown interface to a IPersistFile
IfPersistFile := IfUnknown as IPersistFile;
sFileName := AsAppName ;
sFilePath := ExtractFilePath( sFileName ) ;

// using the Interface to the Shell link call some of
// it's methods.
with IfShellLnk do
begin
setArguments( PChar(AsCmdLine) ) ;
setPath( PChar(sFileName) ) ;
setWorkingDirectory( PChar(sFilePath) ) ;
setDescription( PChar(AsDescription) ) ;
end ;
...
==============
就拿..IShellLink 接口中的 setArguments 方法来说吧...?我怎么在ShlObj单元中没有发现它的实现呢?----还是在别的地方..?
嘻~~别见笑...

 
接口不一定要自己实现的,
 
to Tassadar:
接口不一定要自己实现的..
==========
对,可是我们不实现,总要有人去实现.....可是我现在不知谁实现它了?在哪儿找不到..
很不明白....
 
IShellLink是有Windows实现的,如果你要看怎么实现的找微软要代码去
接口其中一个作用,就是让用户知道对象有什么方法,
但是不需要知道对象是怎么实现的
 
to Tassadar:
谢谢你的答复....:)

IShellLink是有Windows实现的..
但是我想delphi中应该有像这样子的声明..
const
shell32 = 'shell32.dll';

procedure SHAddToRecentDocs; external shell32 name 'SHAddToRecentDocs';

而它没有..我不明白编译器如何转到windows下的实现去执行......能说一下它的执行过程吗...?谢谢~
 
有些com对象是放在dll里面的,但是调用跟普通dll不一样
不需要在delphi里面声明的,com都要在注册表里面注册的
以你贴出来的代码为例
//create a com object
IfUnknown := CreateComObject(CLSID_ShellLink);//CLSID_ShellLink是一个GUID根据这个GUID系统就是创建相应的对象
你最好找本Delphi的书看一看介绍com的部分
 
昨天写了一些..结果没提交上来..
谢谢Tassadar...:)
 
接受答案了.
 
后退
顶部