MFC dll
Posted 不会写代码的丝丽
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC dll相关的知识,希望对你有一定的参考价值。
相比我们以前的常规c/c++库,我们有时候想添加一些特有mfc资源在里面, 这时候以前的常规库就很难满足我们的需求了。于是微软推出了mfc自己的官方库。
我们新建的库的时候可以看到有三类
但其实我们可以在另一个角度视为两种类别:
- mfc常规dll
- mfc扩展dll
mfc
常规dll
可以给MFC工程和c工程使用,内部自己会在新建一个CWinApp
对象其内部大致分为两种类别:静态库
和动态库
class CMFCShareDllApp : public CWinApp
{
public:
CMFCShareDllApp();
// 重写
public:
virtual BOOL InitInstance();
DECLARE_MESSAGE_MAP()
};
但是动态库库需要注意在使用句柄获取资源需要添加AFX_MANAGE_STATE(AfxGetStaticModuleState());
如下代码:
extern "C" BOOL PASCAL EXPORT ExportedFunction()
// {
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
// // 此处为普通函数体
// }
mfc
扩展dll仅能给MFC
工程使用,并且也是动态库的一种
不管是哪种库他们都可以给MFC
工程使用。
举例我们使用MFC静态库生成一个弹窗
对应的文件:
//MyDlg.h
class MyDlg : public CDialogEx
{
DECLARE_DYNAMIC(MyDlg)
public:
MyDlg(CWnd* pParent = nullptr); // 标准构造函数
virtual ~MyDlg();
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_DIALOG1 };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
};
添加导出文件:
//MyExpose.h 自行定一个导出函数
__declspec(dllexport)
void showMydlg();
//对应实现类
// MyDlg 消息处理程序
#include "MyExpose.h"
#include "MyDlg.h"
void showMydlg() {
MyDlg dlg;
dlg.DoModal();
}
在目标工程和常规c库使用即可。
//MyExpose.h 修改工程头文件改为导如
__declspec(dllimport)
void showMydlg();
//导入
#pragma comment(lib,"MFCStaticDll.lib")
int WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd) {
showMydlg();
return 0;
}
以上是关于MFC dll的主要内容,如果未能解决你的问题,请参考以下文章