创建一个MFC动态链接库

        还没好好的学习一下MFC,之前学过一段时间的QT,现在发现MFC与QT其实很相似,都很详细的提供了界面库,可能在具体的细节方面有不同吧,等着去发现。

一、创建DLL文件

1、新建工程文件如下:

2、选择regular DLL using shared MFC DLL

3、切换到Resource框,在Dialog上右击Insert Dialog,并且用View下面ClassWizard创建这个Dialog的类Mydialog,生成文件MyDlg.cpp和MyDlg.h

自己的理解:mfcDll.cpp相当于是主文件,程序运行时先从这里开始,MyDlg.cpp是针对MyDlg对话框的类文件。

                         

4、在Dialog界面上面添加EditBox和Button,然后右击ClassWizard,在Member Variables里面为这两个对象添加对应的变量值,以便在程序中调用这些控件


5、双击button按钮,就可以为button添加click信号的函数

void MyDlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	m_MyEdit.SetWindowText("this is dll Dlg");
}
6、最关键是在mfcDll.cpp中添加入下程序,mfcDll.cpp相当于主程序(启动程序时先运行),而MyDlg.cpp是对话框对应的类文件

extern "C" __declspec(dllexport) void ShowDlg(void)
		{
			AFX_MANAGE_STATE(AfxGetStaticModuleState());
			// normal function body here

			MyDlg dlg;
			dlg.DoModal();
		}
7、编译之后生成


二、使用DLL文件

1、将mfcDll.dll文件放入测试文件dllTest文件夹下,这里我并没有添加.h文件,也可以成功编译,不知为什么。

2、调用mfcDll.dll文件中的函数

在dllTest对话框中添加按钮“打开DLL测试框”,并为这个按钮添加如下代码:

void CDllTestDlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	typedef void (*pFunction)(void);
	HINSTANCE hLibrary; //DLL句柄
	hLibrary = LoadLibrary("mfcDll.dll");
	if (hLibrary == NULL)	MessageBox("DLL加载失败");

	pFunction pShowDlg = (pFunction)GetProcAddress(hLibrary,"ShowDlg");
	if (NULL==pShowDlg) MessageBox("DLL中不存在指定的函数"); 
	else	pShowDlg();
}

以上便完成了对DLL文件的调用。


程序下载地址:http://download.csdn.net/detail/luckywang1103/6357693




以下是一个简单的示例代码,用于创建一个MFC动态链接库,并暴露一个函数方法,该方法可以创建一个窗口并在窗口上嵌入一个Web页面。请注意,这只是一个示例,可能需要根据具体需求进行修改。 首先创建一个MFC DLL项目: 1. 打开Visual Studio,选择“创建新项目”。 2. 选择“Visual C++” -> “MFC” -> “MFC DLL”。 3. 输入项目名称并单击“创建”。 接下来,将以下代码添加到StdAfx.h文件: ```c++ #define DLL_EXPORT __declspec(dllexport) ``` 然后,将以下代码添加到您的头文件,以定义您的类: ```c++ class DLL_EXPORT CMyWebWindow : public CWnd { public: CMyWebWindow(); BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL); protected: DECLARE_MESSAGE_MAP() private: CHtmlView m_webView; }; ``` 接下来,在您的源文件实现CMyWebWindow类的构造函数和Create方法: ```c++ #include "stdafx.h" #include "MyWebWindow.h" #ifdef _DEBUG #define new DEBUG_NEW #endif CMyWebWindow::CMyWebWindow() { } BOOL CMyWebWindow::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) { BOOL bResult = CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext); if (bResult) { // Create the web view control CRect rcClient; GetClientRect(&rcClient); if (!m_webView.Create(NULL, NULL, WS_VISIBLE | WS_CHILD, rcClient, this, 0)) { bResult = FALSE; } else { // Navigate to the specified URL CString strUrl = _T("http://www.example.com"); m_webView.Navigate2(strUrl, NULL, NULL); } } return bResult; } BEGIN_MESSAGE_MAP(CMyWebWindow, CWnd) END_MESSAGE_MAP() ``` 最后,在您的源文件定义导出函数: ```c++ extern "C" DLL_EXPORT CWnd* CreateWebWindow(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) { CMyWebWindow* pWebWindow = new CMyWebWindow(); if (!pWebWindow->Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext)) { delete pWebWindow; pWebWindow = NULL; } return pWebWindow; } ``` 现在,您可以生成并使用此DLL,以创建具有Web视图控件的窗口。在您的其他应用程序,只需调用CreateWebWindow函数即可创建此窗口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luckywang1103

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值