对插件感兴趣的进来一下

MEFULEU 2006-02-22 10:51:11
某一程序,想添加一些新的功能,现在已经使用DLL来实现了新的功能,

使用这种方法似乎每次新增功能都必须重新的编译主程序才可以;

看了看有些说明说使用插件可以不用重新编译主程序,

那么问题来了:

我看很多的插件例子调用时都是像DLL一样加载,究竟怎么加载才可以一劳百逸呢?

就是一句话,我不想每次都编译源程序;直接添加一个DLL都相应目录即可;

那么怎么主程序加载插件过程究竟怎么写才可以???????????????????

...全文
136 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
MEFULEU 2006-02-23
  • 打赏
  • 举报
回复
下了那个spywin看了看才发现自己编程才接触冰山一角;

惭愧!!!!!!!!!!!111!!!
MEFULEU 2006-02-23
  • 打赏
  • 举报
回复
a,b,c,d,e,f
诸类DLL一样的输出接口,那么也就是说在主程序每个角落都要进行判断调用一下了?

假设我有N个子窗口,每个字窗口都要调用一下这些接口函数?

那么对应于每个子窗口来说也必须要调用预定义好的DLL??---是不是就是说预留接口?

可是这样子怎么知道那个DLL是他的?

另外既然开始已经知道了开始要调用什么东西?干吗我在后边再重新的搞什么插件????
constantine 2006-02-23
  • 打赏
  • 举报
回复
//---------------------------------------------------------------------------

#include <vcl.h>
#include <windows.h>
#pragma hdrstop


#pragma argsused
extern "C" __declspec(dllexport)
void __stdcall GetPlugInEffectName(LPTSTR Effect,LPTSTR Info);
extern "C" __declspec(dllexport)
void __stdcall DoEffect(Graphics::TBitmap *Bmp);
struct RGB
{
byte BlueColor;
byte GreenColor;
byte RedColor;
};

//--------------------------------------------------------
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}

void __stdcall GetPlugInEffectName(LPTSTR Effect,LPTSTR Info)
{
strcpy(Effect,"旋转180度");
strcpy(Info,"Rotate180 Plug-In v1.0 [Rotate180.DLL]");
}
void __stdcall DoEffect(Graphics::TBitmap *Bmp)
{
Graphics::TBitmap *Bmp1;
TRect MyRect, MyOther;
MyRect = Rect(Bmp->Width,Bmp->Height,0,0);
MyOther = Rect(0,0,Bmp->Width,Bmp->Height);
Bmp1=new Graphics::TBitmap;
Bmp1->Width=Bmp->Width;
Bmp1->Height=Bmp->Height;
Bmp1->Canvas->Draw(0,0,Bmp);
Bmp->Canvas->CopyRect(MyOther, Bmp1->Canvas, MyRect);
delete Bmp1;
}

一个简单的例子GetPlugInEffectName,DoEffect 这2个函数是每个插件都有的,不管你调用那个dll,都是这2个函数,通过第一个知道插件的作用,使用的时候就调用第二个函数,调用都用动态调用,这个相信你一定会

dll的名字可以用ini记录,注册表也可以,或者放在同一个目录下,每次启动就遍历一下目录下面所有的*.dll,这样就知道有那些dll文件,就这么简单
constantine 2006-02-23
  • 打赏
  • 举报
回复
简单点说,这些dll的输出函数是一样的,一样的名字,一样的参数,一样的返回值,不过函数实现的内容不一样,dll文件的名字不一样,如果你知道有多少个dll了,你当然调用几次就可以了
这么调用就不用说了

如果实在还不明白就说一下,我回去给你copy个例子过来,上面说的书好像后面还有“技术”2字
在里面介绍图像编程那一章就有代码
qybao 2006-02-23
  • 打赏
  • 举报
回复
我是这么想的
1. 主程序从配文件(如ini)或注册表中载入dll
2. 每个dll都有相同的接口(函数参数,返回类型一致)
3. 主程序根据具体逻辑需要,调用不同的dll(接口都是一样的,只是载入的dll不同,主程序可以不用重新编译,只需要发布dll的时候,重新修改一下配置文件或注册表就可以)
constantine 2006-02-23
  • 打赏
  • 举报
回复
添加插件的模板不是你自己规定的吗,你要这么写就这么写,以后插件都要按照他的样子来做,
实际上就是知道有多少个dll,然后调用就行了,因为每个dll的接口都是一样的

你可以看看C++builder 高级编程 里面有例子
cczlp 2006-02-23
  • 打赏
  • 举报
回复
到老妖网站www.ccrun.com下载个Spy4win, 里面有说明和例子.
cczlp 2006-02-22
  • 打赏
  • 举报
回复
函数接口是固定的, 调用就行
奥爸 2006-02-22
  • 打赏
  • 举报
回复
用工厂模式, 插件的接口都定义好
1: 每生成一个插件的dll,把dll的名字都象主程序注册一下,放配置文件或者注册表等等之中.
2: 主程序 根据注册的dll的名称调用不同的dll,调用该dll的函数跟你返回插件的实例
MEFULEU 2006-02-22
  • 打赏
  • 举报
回复
我看过Aweay提供的MySpy插件膜板,可是没有怎么说明主程序怎么加载插件的;

这样子,就算我添加了一个调用新的窗口的过程,他里边也不知道去那调用阿?

难道我查找他的窗口句柄?然后动态生成按钮?


constantine 2006-02-22
  • 打赏
  • 举报
回复
就如不惑说的,
你看看ccrun那个工具里面的文件吧,里面有说这么帮他的工具写插件的,就是一样的接口
然后自己判断有多少个dll,所有dll的调用都一个样
sanyou98 2006-02-22
  • 打赏
  • 举报
回复
up
奥爸 2006-02-22
  • 打赏
  • 举报
回复
把 活的东西都定义成接口, 主程序只是一个框架.
菜单什么的,把菜单句柄传递给插件,让插件去实现,其余的都类似了.只能把活的东西都拿走,让插件去实现
MEFULEU 2006-02-22
  • 打赏
  • 举报
回复
to:cczlp(不惑)
函数接口怎么会固定的?

那么我第一次想在主程序实现多添加一个菜单。

第二次我想在主程序调用出来的某个页面添加一些参数设定页面;

第三次我想在主程序某个地方多添加一个工具按钮;

那么是不是说,一开始主程序就必须考虑到这些东西;

这个好像有些.......有些不知道如何实现阿???
netsys2 2006-02-22
  • 打赏
  • 举报
回复
没插过,帮顶

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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