解决方案 »

  1.   

    用扩展的dll就可以导出mfc派生的类
      

  2.   

    #define DllExport   __declspec( dllexport )对于一般类
    class  DllExport Yourclass{ ... };不过MFC类只有MFC扩展DLL才支持。
      

  3.   

    http://www.codeproject.com/dll/BeginnerDLL.asp
      

  4.   

    class AFX_EXT_CLASS CWndOP : public CWnd  
    {
    public:
    BOOL ShortMenu(int iPos, CMenu* pShortMenu = NULL);
    BOOL TaskBarDeleteIcon(UINT uID);
    BOOL TaskBarIcon(UINT uID, HICON hIcon, LPSTR lpszTip, UINT uMotion);
    CWnd* GetpWnd(CString str);
    CWndOP();
    virtual ~CWndOP(); // Generated message map functions
    //{{AFX_MSG(CWndOP)
    afx_msg LRESULT OnIconNotify(UINT uType, WPARAM wParam, LPARAM lParam, int iMenuPos, CMenu* pMenu = NULL);
    //}}AFX_MSG
    private:
    BOOL MenuPopup(int iMenuPos, CMenu* pShortMenu);
    DWORD WndPopup();
    };
      

  5.   

    to free_card():非常感谢,我收到一个邮件,不知是不是你的,但邮件中有病毒,若是你的请你重发一个,再次感谢你的帮助
      

  6.   

    me too:
    [email protected]
    3q
      

  7.   

    我也急需一个,我的信箱是[email protected],谢谢!
      

  8.   

    to ahao(天·狼·星星):还没呢?能发给我一个吗,谢谢
      

  9.   

    这个用这么麻烦么?!1)首先建立一个DLL工程
    注意,要建立成MFC Extend DLL(这样你才能够使用MFC类)
    然后Ctrl + R,向资源中加入一个对话框
    然后随你在上面放些控件
    再然后,Ctrl + W启动类向导
    这时系统会提示你新建一个IDD_DIALOG1的对话框类,单击OK确定
    好了,到这一步,呵呵,都和普通的Windows Dialog程序没有什么不同
    我起的类名字为CMyDlg(哇,这么土~~)
    2)双击进入CMyDlg,注意是头文件
    整个头文件的部分内容如下:
    #if !defined(AFX_MYDLG_H__645E069A_5466_11D7_958C_00E04C821B78__INCLUDED_)
    #define AFX_MYDLG_H__645E069A_5466_11D7_958C_00E04C821B78__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // MyDlg.h : header file
    ///////////////////////////////////////////////////////////////////////////////
    // CMyDlg dialog
    // 上面那些都是无用的!系统自动生成的,下面这些才是精华!!
    #include "resource.h"  //这一行必须加,否则MFC找不到Dialog资源的位置#define _MYDLG_EXPORT_#ifndef _MYDLG_EXPORT_
    #define _CLASS_EXP_  __declspec(dllimport) 
    #else 
    #define _CLASS_EXP_ __declspec(dllexport) 
    #endif
    // 上面是定义了一个编译预处理,正是可以导出类的精华所在必须加
    class _CLASS_EXP_ CMyDlg : public CDialog  // 看到了罢,在CMyDlg前面加上_CLASS_EXP_即可
    {        // 不用那么死心眼非加AFX_EXT_CLASS,只要是上面宏定义的
    // Construction                               什么字符串都可以
    public:
     CMyDlg(CWnd* pParent = NULL);   // standard constructor// Dialog Data
     //{{AFX_DATA(CMyDlg)
     enum { IDD = IDD_DIALOG1 };
      // NOTE: the ClassWizard will add data members here
     //}}AFX_DATA
    好了,除了上面的一点点东西别的都不变,你想要什么功能都可以
    自己用Class Wizard编罢
    CPP文件的编写没有任何变化,可以随意
    在DLLMain所在的文件中加入
    #include "MyDlg.h"
    然后Build 该DLL即可
    3)建立一个Dialog的Win32程序
    选择Project->Add To Project...->Files...
    选择文件类型为Lib,然后选择xxxx.lib(你的DLL生成的)
    注意下面的操作很重要
    首先拷贝一份你在DLL工程中的资源文件,resource.h到其他的目录,然后,将其重命名为
    resource1.h
    然后将其拷到你的Win32 exe工程目录下待用。
    将你的MyDlg.h(对话框头文件)拷贝到你的Win32 exe工程目录,
    单击Project->Add To Project->Fies...
    选择MyDlg.h,好了,现在你应该可以在Class 视图中看到该导出类了。
    你如果需要使用的时候,和使用普通的类一样:
    #include "MyDlg.h"
    ...
    ...
    CMyDlg dlg ;
    dlg.DoModal()
    ...
    就可以随心所欲了
    是不是很简单??上面是导出MFC类,带有资源的,比较烦。
    如果你需要导出不带有资源的普通类,那么就不用拷贝什么resource.h
    也不用加什么#include "resource.h"了,
    只要把.h文件拷过去,Add到当前工程里,并加个.Lib即可使用。最后需要说明的是,该程序需要DLL文件在当前目录下,才能运行喔
    不知道大家看没看懂