插件???????????? 高手赶快来!!!-----50分

fsybaby 2003-10-07 07:57:51
如何实现插件原理??

最好带例子

fusiyuanfsy@163.com

接受任何回答方式
...全文
29 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qixp231 2004-01-07
  • 打赏
  • 举报
回复
l
Miracle 2003-10-16
  • 打赏
  • 举报
回复
我很久以前在www.codelphi.com发表过一篇完整的文章,带例子,你用“插件”作关键字搜索一下,应该能找到。
ilmself0451 2003-10-16
  • 打赏
  • 举报
回复
ilmself@0451.com
FrameSniper 2003-10-12
  • 打赏
  • 举报
回复
偶是来学习的!
fsybaby 2003-10-12
  • 打赏
  • 举报
回复
谁弄点例子来??
fusiyuanfsy@163.com
tonylk 2003-10-08
  • 打赏
  • 举报
回复
主程序:
======
PCompCardItem = ^TCompCardItem;
TCompCardItem = record
DllHandle:Hwnd;
FileName:String;
CardGUID:TGUID;
CardName:String;
GetCompEditor:GetCompEditorProc;
GetCompController:GetCompControllerProc;
GetCompLoader:GetCompLoaderProc;
end;

//将某个dll中的内容信息保存在队列内
procedure TCompCardManager.AddCompCard(AFileName:String);
var
Item:PCompCardItem;
DllHandle:Hwnd;
GetCardGUID:GetCardGUIDProc;
GetCardName:GetCardNameProc;
FileName:String;
begin
FileName:=ExtractFileName(AFileName);
if Assigned(FOnLoading) then begin
FOnLoading(self,Format('Loading %s...',[FileName]),300);
end;
DllHandle:=LoadLibrary(PChar(AFileName));
if DllHandle<>0 then begin
GetCardGUID:=GetProcAddress(DllHandle,'GetCardGUID');
GetCardName:=GetProcAddress(DllHandle,'GetCardName');
if (@GetCardGUID<>nil) and (@GetCardName<>nil) then begin
new(Item);
Item^.DllHandle:=DllHandle;
Item^.FileName:=AFileName;
Item^.CardGUID:=GetCardGUID();
Item^.CardName:=GetCardName();
Item^.GetCompEditor:=GetProcAddress(DllHandle,'GetCompEditor');
Item^.GetCompController:=GetProcAddress(DllHandle,'GetCompController');
Item^.GetCompLoader:=GetProcAddress(DllHandle,'GetCompLoader');
FCompCardList.Add(Item);
end
else begin
FreeLibrary(DllHandle);
raise CompCardException.CreateFmt('Card "%s" is not a valid card file!',[FileName]);
end;
end
else begin
raise CompCardException.CreateFmt('Can not load card "%s"!',[FileName]);
end;
end;

//从已存在的Dll列表中找到要找的那个,并且调用其中的函数,让其返回某个类(是类不是对象)
function TCompCardManager.FindCompLoader(ACardGUID:TGUID):TCompLoaderClass;
var
Item:PCompCardItem;
I:Integer;
begin
Result:=nil;
for I:=0 to FCompCardList.Count-1 do begin
Item:=FCompCardList.Items[I];
if IsEqualGUID(Item^.CardGUID,ACardGUID) then begin
if Assigned(Item^.GetCompLoader) then begin
Result:=Item^.GetCompLoader();
end;
exit;
end;
end;
end;

//程序最终通过该找到的类来创建出真正的对象。
procedure TRoundManager.LoadCompetition(ATypeGUID:String;AFileName:String;ARoundID:Integer);
var
CompLoaderClass:TCompLoaderClass;
CompLoader:TCompLoader;
begin
CompLoaderClass:=GCardManager.FindCompLoader(StringToGUID(ATypeGUID));
if not Assigned(CompLoaderClass) then begin
raise RoundMgrException.Create('Can not found CompLoaderClass!');
end;
CompLoader:=CompLoaderClass.Create();
if not Assigned(CompLoader) then begin
raise RoundMgrException.Create('Can not create CompLoader!');
end;
CompLoader.LoadCompetition(AFileName,ARoundID,FDataStream);
end;

dll中:
======
function GetCompLoader():TCompLoaderClass;
begin
Result:=TBasketballLoader;
end;

exports
GetCompLoader;

//TCompLoader的具体实现
type
TBasketballLoader = class(TCompLoader)
public
procedure LoadCompetition(AFileName:String;ARoundID:Integer;ADataStream:TMemoryStream);override;
end;

//主程序和dll都共有的基类声明,这样主程序才能知道到底哪些方法是该类所支持的。
type
TCompLoaderClass = class of TCompLoader;

TCompLoader = class(TObject)
public
procedure LoadCompetition(AFileName:String;ARoundID:Integer;ADataStream:TMemoryStream);virtual;abstract;
end;

需要使用sharemem,或是runtime bpl,我比较喜欢后者.


tonyki@citiz.net
www.tonixsoft.com
dickeybird888 2003-10-08
  • 打赏
  • 举报
回复
//??
WuLoveXue 2003-10-08
  • 打赏
  • 举报
回复
好像是写注册表吧!
tanqth 2003-10-07
  • 打赏
  • 举报
回复
up, 不知道你是什么意思
作为一个网页制作高手、美工和程序员,我们都有过这样的经历:当看到一个漂亮的Flash的 时候或看到一个精巧的JavaScript功能的时候,使用IE的查看源代码的功能,仔细析相关 的HTML代码,从临时目录中或网站上取得想要的SWF文件和JS文件。吸取别人优点的做法往 往能够事半功倍,互联网中这样的宝藏真是不计其数!WebPage Spy就是一个帮助我们挖掘这 些宝藏的工具,他能够将您想要从网页中得到的一切门别类的呈现在您眼前! WebPage Spy有一个HTML代码析器,它能够在网页在浏览器显示一个网页的时候自动从其中 析出该网页所含的HTML文件、Flash文件、JavaScript代码、Style Sheet代码、图像文件、 Applet文件、链接等等。所有这些显示在树形列表中,点击鼠标就可以查看图像和浏览代码, 可以将自己喜欢的文件保存到自己指定的目录中。 WebPage Spy还提供了许多附件来增强IE的功能,这些功能添加在同内容相关的右键菜单中, 您可以根据自己的需要选用:您可以使用“搜索包含此内容的网站“和“在新闻组中搜索此内容” 功能在互联网上搜索在网页中选中的文字;您可以使用“查看所选部的代码”来查看网页的 部HTML代码,方便程序调试和代码析;“放大“、“缩小”和“高亮度显示文字”功能方便您在 演示的时候更好的标示重点,等等。 WebPage Spy还将常用的IE配置功能通过菜单的方式提供,您只要点击一下就可以达到目的, 再也不用总是进入“工具/Internet选项”,在选项卡中来回翻找。提供的快捷功能有:删除临 时文件,删除cookies,清除历史纪录。提供的选项开关有:显示图片,禁止脚本调试,启用 自动完成功能,允许脚本运行,允许Java Applet运行,允许ActiveX和插件运行。 赶快拥有WebPage Spy,发掘网页中无尽的宝藏! 产品特性 * 在您浏览网页的同时自动运行; * 同IE完美集成,可以象收藏夹那样显示和关闭; * 支持含Frame和IFrame的网页; * 将Flash, 图像, JavaScript, Style Sheet, 链接类显示在树中; * 能够生成网页的所含外部元素的报告,并估算整个网页完全下载所需的时间; * 双击鼠标查看JavaScript, Style Sheet和网页的源代码; * 保存任何喜欢的内容; * 提供很多增强IE功能的附件; * 自定义增加的附件的数量; * 提供改变IE设置的快捷操作; * 图像列表可以将页面背景图,表格背景图等都列举出来; * JavaScript和Style Sheet列表包含链接的外部文件,也包含网页中内含的代码。

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧