用向导创建一个扩展DLL工程,添加一个类,然后在类前面名前加AFX_EXT_CLASS 就行了,这个类就被导出了,网上例子很多,似乎也很简单,其实类复杂一点,就会有些问题了,如:
ExtDlg.h
#pragma once
#include "resource.h"
#include "dxxxdlg.h"//另一个类的头文件
// CExtDlg 对话框
class AFX_EXT_CLASS CExtDlg : public CDialog
{
DECLARE_DYNAMIC(CExtDlg)
public:
CExtDlg(CWnd* pParent = NULL); // 标准构造函数
virtual ~CExtDlg();
// 对话框数据
enum { IDD = IDD_EXTDLG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
public:
int m_num;
public:
virtual BOOL OnInitDialog();
public:
int m_input;
public:
afx_msg void OnBnClickedBnSet();
public:
CDxxxDlg m_xxxDlg;
};
然后在函数中使用 m_xxxDlg对象
我想表达的情况是:我想导出B类,但在B类中又包含了A类的对象,因此需要在B类的头文件 中包含A类的头文件,
我还是照例把.lib,.dll,.ExtDlg.h文件拷贝到调用此DLL的工程的相关目录下,一调用,问题就出来了,说dxxxdlg.h 没有找到。
这个很显然,当然目录下根本没有这个文件,可是在ExtDlg.h中肯定要包含这个文件呀,这怎么办。最简单的办法是将那个头文件也拷贝过来,但通常情况下,别人给你一个.h和.lib .dll就了不得了,哪个还把头文件都给你呢,一想肯定这个封装是问题的,可问题的我也不知道怎么封装比较合理,稍后继续.....
将所有要用到的头文件都包含,找不到的头文件都添加进来就行了。本来就是这样的。