关于接口, 插件的问题!(如何用Delphi的接口实现插件?)

angelface 2004-09-22 03:59:12
以下是我的办法, 我觉得不好, 请大家给个好的意见!
[dll]
uses
SysUtils,
Classes,
Dialogs,
Plug in 'Plug.pas';

type
TDocument = class(TInterfacedObject, IDocument)
private
FStrings: string;
public
procedure Created;
procedure Destroyed;
procedure CreateString(str: string);
function ResultString: string;
end;
{$R *.res}

var
Document: IDocument;

{ TDocument }

procedure TDocument.Created;
begin
ShowMessage('Document is created');
end;

procedure TDocument.CreateString(str: string);
begin
FStrings := str + 'one';
end;

procedure TDocument.Destroyed;
begin
ShowMessage('Document is destroyed');
end;

function TDocument.ResultString: string;
begin
Result := FStrings;
end;

function CreateClass(): IDocument; stdcall;
begin
Document := TDocument.Create();
Result := Document;
end;

exports
CreateClass name 'CreateClass';

begin
end.
[定义的接口]
unit Plug;

interface

uses Windows;

type
IDocument = interface
procedure Created;
procedure Destroyed;
procedure CreateString(str: string);
function ResultString: string;
end;

有几个问题, 我除了在dll里放一个CreateClass方法, 来导出IDocument外, 实在想不出其它方法了, 大家可以帮我想想还有什么别的方法么? 还有一个就是, 在主程序里FreeLibrary的时候, 会出问题, 我搜过以前的一个贴子说要导出接口, 不知道他是怎么导的, 没有源码, 谁知道这个问题, 请回答, 谢谢了!
...全文
185 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
erace992001 2004-09-24
  • 打赏
  • 举报
回复
如果要导出接口,你的类一定要继承自TInterfaceObject或者自己实现Interface的三个方法,

然后在调用后,再设置接口变量为nil即可
最好在传递参数时不要用string类型的,因为string类型不是一种公用类型,只是一个array of char类型的变种!用PChar来代替string类型的传递,如果要返回string类型的呢?也采用PChar类型,不过在调用时,要先分配内存,再传给dll调用!
mhj403 2004-09-24
  • 打赏
  • 举报
回复
你的方法正确,CreateClass就是导出接口。在这里修改一下,
Uses
ShareMem,
SysUtils,
...
在调用程序的工程文件中也要加上ShareMem
angelface 2004-09-24
  • 打赏
  • 举报
回复
谢谢上面两位, 用string只个例子, 我只是为了方便,

angelface 2004-09-23
  • 打赏
  • 举报
回复
多少源码不是问题, 主要是能找到, 我搜过了, 因为没有搜到,要不然不会在这里问,
okeyme 2004-09-23
  • 打赏
  • 举报
回复
用google搜一下,原来我找到一篇文章 大概14页带源码的
angelface 2004-09-23
  • 打赏
  • 举报
回复
delphi6 开发人员手册? 就是delphi6开发人员指南吧


帮帮忙啊, 大家,
OooOooOooOooO 2004-09-22
  • 打赏
  • 举报
回复
还不会学接口啊!帮上忙,帮你顶一下.
JJNW 2004-09-22
  • 打赏
  • 举报
回复
好像《delphi6 开发人员手册》上有讲解
相关推荐
发帖
Windows SDK/API

1177

社区成员

Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
帖子事件
创建了帖子
2004-09-22 03:59
社区公告
暂无公告