最近须要制作一个带插件的平台,
插件有自己的主函数,属性.....等一些设置函数.
请教大家,有没有什么好的办法或方案.

解决方案 »

  1.   

    有啊,首先插件的输出函数最好一样,避免了主程序频繁的修改,主程序运行时循环读取插件目录里面的DLL,或者可以选择读取,读完了之后,把函数的信息存到某个结构里,比如插件名,函数名,函数地址,最好生成一个类,里面有一些虚函数,以方便操作.
      

  2.   

    我写了参考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)”类型)不知道是怎么回事,请高手指点
      

  3.   

    AfxBeginThread的那个函数最好写成UINT ThreadProc(LPVOID pParam)
    {
       //...
       return 0;
    }
      

  4.   

    virtual UINT Ap_Run(LPVOID pvThread) = 0; 是你AfxBeginThread调用的那个?最好写成:
    static callback的
      

  5.   

    下载aicase designer,参考其中的sdk.可惜是bcb的。