关于插件制作各位高手有没有什么高见!在线等 最近须要制作一个带插件的平台,插件有自己的主函数,属性.....等一些设置函数.请教大家,有没有什么好的办法或方案. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有啊,首先插件的输出函数最好一样,避免了主程序频繁的修改,主程序运行时循环读取插件目录里面的DLL,或者可以选择读取,读完了之后,把函数的信息存到某个结构里,比如插件名,函数名,函数地址,最好生成一个类,里面有一些虚函数,以方便操作. 我写了参考VCKbase的一位朋友写了这样一个类,class CComponent{public: CComponent(void):lpParent(NULL),running(false) {}; //~CComponent(void);public: virtual void Release(void) = 0; //release memory virtual HICON GetIcon(void) = 0; //get the icon of plugin's virtual UINT Ap_Run(LPVOID pvThread) = 0; //main function virtual bool Ap_Stop(void) = 0; //stop main function virtual void Initialize(void) = 0; //initialize plugin virtual void Attribute(void) = 0; //config plugin's attribute virtual void About(void) = 0; //show aboutprotected: LPVOID lpParent; //parent's windows handle bool running; //plugin's state};并派生出这样的类class Ctestplg : public CComponent{public: Ctestplg(void); ~Ctestplg(void); TCHAR m_receive_path[MAX_PATH]; TCHAR m_send_path[MAX_PATH]; TCHAR m_ht_application_path[MAX_PATH]; TCHAR m_application_path[MAX_PATH]; long m_port; long m_speed; long m_stopbit; long m_length; long m_parity; long m_usecfg;public: void Release(void) { delete this; } //release memory HICON GetIcon(void) { //get the icon of plugin's if (m_hIcon) return m_hIcon; else return HICON(NULL); } UINT Ap_Run(LPVOID pvThread); //main function bool Ap_Stop(void); //stop main function void Initialize(void); //initialize plugin void Attribute(void); //config plugin's attribute void About(void); //show aboutprivate: HICON m_hIcon;};但是这样调用是编译器就报错了d:\项目程序\插件及平台\interface\interfacedlg.cpp(216): error C2665: “AfxBeginThread” : 2 个重载中没有一个可以转换参数 1(从“UINT (LPVOID)”类型)不知道是怎么回事,请高手指点 AfxBeginThread的那个函数最好写成UINT ThreadProc(LPVOID pParam){ //... return 0;} virtual UINT Ap_Run(LPVOID pvThread) = 0; 是你AfxBeginThread调用的那个?最好写成:static callback的 下载aicase designer,参考其中的sdk.可惜是bcb的。 如何使用dll导出多个值,在dll中如何传出调用函数的值 能不能不调用OnPaint函数,往静态静态文本框上写字 多线程运行,如何保证一个线程不中断 虚心请教 为什么我创建的窗口在对话框中不能响应鼠标消息。 如何去掉SDI界面中的菜单? 字符串如何转换为函数名?在线等待! 给图像作傅立叶变换与反变换的源码,急者作毕设。 我发的东西16进制数在服务器端显示的是乱码。 怎样才能得到积分? 计算器的显示 堆和栈的区别是什么?谢谢!
class CComponent
{
public:
CComponent(void):lpParent(NULL),running(false) {};
//~CComponent(void);public:
virtual void Release(void) = 0; //release memory
virtual HICON GetIcon(void) = 0; //get the icon of plugin's
virtual UINT Ap_Run(LPVOID pvThread) = 0; //main function
virtual bool Ap_Stop(void) = 0; //stop main function
virtual void Initialize(void) = 0; //initialize plugin
virtual void Attribute(void) = 0; //config plugin's attribute
virtual void About(void) = 0; //show aboutprotected:
LPVOID lpParent; //parent's windows handle
bool running; //plugin's state};并派生出这样的类
class Ctestplg :
public CComponent
{
public:
Ctestplg(void);
~Ctestplg(void); TCHAR m_receive_path[MAX_PATH];
TCHAR m_send_path[MAX_PATH];
TCHAR m_ht_application_path[MAX_PATH];
TCHAR m_application_path[MAX_PATH]; long m_port;
long m_speed; long m_stopbit;
long m_length;
long m_parity; long m_usecfg;public:
void Release(void) { delete this; } //release memory
HICON GetIcon(void) { //get the icon of plugin's
if (m_hIcon) return m_hIcon;
else return HICON(NULL);
}
UINT Ap_Run(LPVOID pvThread); //main function
bool Ap_Stop(void); //stop main function
void Initialize(void); //initialize plugin
void Attribute(void); //config plugin's attribute
void About(void); //show aboutprivate:
HICON m_hIcon;
};
但是这样调用是编译器就报错了
d:\项目程序\插件及平台\interface\interfacedlg.cpp(216): error C2665: “AfxBeginThread” : 2 个重载中没有一个可以转换参数 1(从“UINT (LPVOID)”类型)不知道是怎么回事,请高手指点
{
//...
return 0;
}
static callback的