社区
进程/线程/DLL
帖子详情
如何制作vc插件?
combojiang
2003-01-09 10:54:07
我在编写程序界面换肤程序,考虑到种种原因,我想做成插件。请各位大侠帮帮小弟。最好给个例子。邮箱:qd_jiang@qingdaonews.com
...全文
433
5
打赏
收藏
如何制作vc插件?
我在编写程序界面换肤程序,考虑到种种原因,我想做成插件。请各位大侠帮帮小弟。最好给个例子。邮箱:qd_jiang@qingdaonews.com
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qrlvls
2003-01-10
打赏
举报
回复
类似于 AddRef 和 Release 的东西呢
combojiang
2003-01-10
打赏
举报
回复
现在很多程序都支持外挂插件,插件可以使程序容易扩展。插件一般来说都是要求有标准接口的。我们在这里做个最简单的插件。插件的结构定义如下:
这个是插件DLL的输出函数,用于创建插件。
BOOL Plug_CreateObject(void ** pobj){
*pobj = new CMyPlug;
return *pobj != NULL;
}
插件的基类定义
class CPlugBase {
public:
CPlugBase(){};
public:
virtual HICON GetIcon() = 0; //用于显示插件的图标
virtual void Hello(int k) = 0; //插件的功能函数。
virtual void Release() = 0; //释放插件。
};
插件的类必须基于CPlugBase,要实现上述三个函数,其他可以任意扩展。
chenybin
2003-01-10
打赏
举报
回复
帮你UP先
foxmail
2003-01-09
打赏
举报
回复
#include "vis.h"
char szAppName[] = "SimpleVis"; // 窗口类名
// 有关配置的声明
int config_x=50, config_y=50; // 窗口在屏幕上的横纵坐标
void config_read(struct winampVisModule *this_mod); // 读配置
void config_write(struct winampVisModule *this_mod); // 写配置
void config_getinifn(struct winampVisModule *this_mod, char *ini_file); // 生成一个 .ini 文件名
// 在需要的时候返回一个 winampVisModule,用在下面的 hdr 中。WinAMP 可由此得知插件中的模块数。
winampVisModule *getModule(int which);
// "成员"函数
void config(struct winampVisModule *this_mod); // 模块配置函数
int init(struct winampVisModule *this_mod); // 模块初始化函数
int render1(struct winampVisModule *this_mod); // 模块1 的“表演”函数
int render2(struct winampVisModule *this_mod); // 模块2 的“表演”函数
int render3(struct winampVisModule *this_mod); // 模块3 的“表演”函数
void quit(struct winampVisModule *this_mod); // 模块结束的清理函数
// 插件窗口的窗口处理函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
HWND hMainWnd; // 主窗口句柄
// 双缓冲数据
HDC memDC; // 内存DC
HBITMAP memBM, // 内存位图 (for memDC)
oldBM; // old bitmap (from memDC)
// 模块头部。包括模块版本,插件描述(出现在选择插件对话框的插件列表框中)和模块接口函数的地址
winampVisHeader hdr = { VIS_HDRVER, "Nullsoft Test Visualization Library
v1.0", getModule };
// 第一模块 (示波器)
winampVisModule mod1 =
{
"Oscilliscope",NULL, // hwndParent
NULL, // hDllInstance
0, // sRate
0, // nCh
25, // latencyMS
25, // delayMS
0, // spectrumNch
2, // waveformNch
{ 0, }, // spectrumData
{ 0, }, // waveformData
config,
init,
render1,
quit
};
// 第二模块 (光谱分析)
winampVisModule mod2 =
{
"Spectrum Analyser",
NULL, // hwndParent
NULL, // hDllInstance
0, // sRate
0, // nCh
25, // latencyMS
25, // delayMS
2, // spectrumNch
0, // waveformNch
{ 0, }, // spectrumData
{ 0, }, // waveformData
config,
init,
render2,
quit
};
// 第三模块 (VU meter)
winampVisModule mod3 =
{
"VU Meter",
NULL, // hwndParent
NULL, // hDllInstance
0, // sRate
0, // nCh
25, // latencyMS
25, // delayMS
0, // spectrumNch
2, // waveformNch
{ 0, }, // spectrumData
{ 0, }, // waveformData
config,
init,
render3,
quit
};
foxmail
2003-01-09
打赏
举报
回复
2001-11-06· ·刘志锋··yesky
我想:在回答“你用什么播放器听 MP3”这个问题时,90%的人都会回答Winamp!那么你一定用过 Winamp 的插件功能吧,正是多样化的插件使这“老”播放器不断地焕发青春。不管新推出什么音频格式(MP4,VQF,RM...),只要插件一装就能播放。还有形形色色的可视插件,比如Giess 等等,将音乐的节奏感表现的可谓淋漓尽致!
既然插件是用程序编写的,那么我们何不来一试身手,动手做它一个出来?!用过 Winamp 的人都知道,Winamp 插件是放在 Pulgin 文件夹中一个个的 DLL(动态链接库)文件,所以编写 Winamp 插件其实就是编写 Windows 的动态链接库。当然写的时候是要遵循一定的规范的(相关文档可以从 www.winamp.com 下载),在这方面,Winamp 作者 Justin Frankel 写的一个可视插件的例子可以作为我们很好的参考。下面我们就以这个例子(当然也是一个编写规范)为参考,认识一下Winamp 可视插件的编写方法。
(下面的程序可从 Winamp 官方网站下载,文件名为 vis_minisdk.zip)
首先让我们看一下可视插件使用的数据结构(在文件 Vis.h 中)
// 注意:
// 任何呆在前台的插件窗口都应该将按键传送给其父(WinAMP 的)窗口,以确保
// 用户仍旧可以控制 WinAMP(除非用户按了 ESC 键或者插件所指定的键)。
// 在存储配置时,配置数据应当统一存放在 \plugin.ini 中。
// 请将这个插件例程看作一个框架。
typedef struct winampVisModule {
char *description; // 模块描述(出现在插件选择列表框下面得下拉列表框中)
HWND hwndParent; // 父窗口------------- (由主调应用填充)
HINSTANCE hDllInstance; // 此 DLL 的实例句柄 - (由主调应用填充)
int sRate; // 采样速率 ---------- (由主调应用填充)
int nCh; // 声道数 ------------ (由主调应用填充)
int latencyMs; // 从调用 RenderFrame 到真正绘制的潜伏时间(毫秒)
// (主调应用在获取数据的时候会查看这个值)
int delayMs; // 每两次调用之间的间隔时间(毫秒)
// 数据依照各自的 Nch(声道数) 条目被填充
int spectrumNch;
int waveformNch;
unsigned char spectrumData[2][576]; // 频谱数据
unsigned char waveformData[2][576]; // 波形数据
void (*Config)(struct winampVisModule *this_mod); // 模块配置函数
int (*Init)(struct winampVisModule *this_mod);
// 初始化函数(创建窗口等等)。成功返回0
int (*Render)(struct winampVisModule *this_mod);
// “表演”函数。成功返回0,如返回1表示插件应该终止
void (*Quit)(struct winampVisModule *this_mod);
// 模块退出函数。完成之后调用
void *userData; // 用户数据 (可选)
} winampVisModule;
typedef struct {
int version; // VID_HDRVER (当前模块的版本)
char *description; // 插件的描述(出现在选择插件对话框的插件列表框中)
winampVisModule* (*getModule)(int); // 用来获取模块结构
} winampVisHeader;
// 定义导出标识
typedef winampVisHeader* (*winampVisGetHeaderType)();
// 当前模块的版本 (0x101 == 1.01)
#define VIS_HDRVER 0x101
上面列出的是一个编写可视插件必须包含的头文件,里面列出了可视插件用到的数据结构。在探讨具体插件程序之前,有一些概念必须搞清:一个可视插件中可以包含若干个模块(每一模块都是一种演示效果,可以在插件选择对话框中选择用哪个模块来演示),这些模块通过某种方法(后面将会看到)被 Winamp 获取,从而得到“表演”的机会。
简而言之,Winamp 利用所有插件 DLL 中导出的一个统一名称的函数获得了一个插件头数据结构,然后通过此数据结构中的一个函数再去获取各个模块的信息(这个过程与 COM 的 QueryInterface() 用法有些神似,看来好的设计思想是相通的),进而利用多线程(通过 DLL View 观察得知)实现可视插件的展示。下面就是可视插件的源程序:
// Winamp 测试用可视插件 v1.0
// 版权所有 (C) 1997-1998, Justin Frankel/Nullsoft
// 基于此框架可自由的编写任何可视插件...
VC
6.0 显示行号
插件
VC
6.0中,编译器默认不带显示行号的功能,所以必须借助第三方
插件
来实现。 本资源是
VC
6.0支持显示代码行号的
插件
:
VC
6LineNumberAddin.dll。 使用方法如下: 1、如果你的
VC
6.0安装在C盘,请拷贝
VC
6LineNumberAddin.dll 文件 到如下目录: C:\Program Files\Microsoft Visual Studio\Common\MSDev98\AddIns 2、注册 双击
VC
6LineNumberAddin.reg 进行注册; 3、启用 打开
VC
6.0,菜单栏:Tools -> Customize -> Add-ins and Macro Files 选中
VC
6LineNumber Developer Studio Add-in,之后按 Close 按钮关闭即可!
VC
6.0显示行数
VC
显示行数
插件
VC
6.0显示行数
VC
显示行数
插件
VC
6.0显示行数
VC
显示行数
插件
VC
6.0显示行数
VC
显示行数
插件
VC
6.0显示行数
VC
显示行数
插件
用
VC
#.NET开发交互式CAD系统
用
VC
#.NET开发交互式CAD系统,包括结合GDI+和OPENGL两种方案。 联系平台客服可开发票。
VC
开发IE
插件
入门源代码
该源代码中简单的实现了在IE中为“查看”-》“工具栏”子菜单项添加菜单项“第一个添加IE工具栏程序”。
vc
_mbcsmfc.exe 下载
原来的代码是VS2010编译的,现升级为VS2013后出现VS2013error MSB8031: Building an MFC project for a non-Unicode character set is deprecated。. You must change the project property to Unicode or download an additional library. Seehttp://Go.microsoft.com/fwlink/p/?LinkId=286820 for more information. 摸索了好久终于解决了,最佳解决方法如下: 1、下载
vc
_mbcsmfc.exe 2、 关闭vs2013,然后安装
vc
_mbcsmfc.exe 3、打开vs2013,点击 项目->属性->常规 (里面的)->字符集 然后选择使用使用多字节字符集。 然后重新生成解决方案你就会惊喜的发现成功了
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章