c++ DLL里面添加对话框资源

1 新建对话框工程

2 在解决方案中新建项目->Windows桌面向导输入MFCDLL-> 选择DLL,并勾选MFC标头

3 在MFCDLL项目下添加资源,ID设置为ID_DLG_TEST,并创建对应的关联类CTest

#pragma once
#include "afxdialogex.h"


// CTest 对话框

class CTest : public CDialogEx
{
	DECLARE_DYNAMIC(CTest)

public:
	CTest(CWnd* pParent = nullptr);   // 标准构造函数
	virtual ~CTest();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_DLG_TEST };
#endif

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

	DECLARE_MESSAGE_MAP()
};
// CTest.cpp: 实现文件
//

#include "pch.h"
#include "MFCDLL.h"
#include "CTest.h"
#include "afxdialogex.h"
#include "resource.h"


// CTest 对话框

IMPLEMENT_DYNAMIC(CTest, CDialogEx)

CTest::CTest(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_DLG_TEST, pParent)
{

}

CTest::~CTest()
{
}

void CTest::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(CTest, CDialogEx)
END_MESSAGE_MAP()


// CTest 消息处理程序

4.修改MFCDLL.cpp

// MFCDLL.cpp : 定义 DLL 的导出函数。
//

#include "pch.h"
#include "framework.h"
#include "MFCDLL.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#include "CTest.h"


// 唯一的应用程序对象

CWinApp theApp;

using namespace std;

int main()
{
    int nRetCode = 0;

    HMODULE hModule = ::GetModuleHandle(nullptr);

    if (hModule != nullptr)
    {
        // 初始化 MFC 并在失败时显示错误
        if (!AfxWinInit(hModule, nullptr, ::GetCommandLine(), 0))
        {
            // TODO: 在此处为应用程序的行为编写代码。
            wprintf(L"错误: MFC 初始化失败\n");
            nRetCode = 1;
        }
        else
        {
            // TODO: 在此处为应用程序的行为编写代码。
        }
    }
    else
    {
        // TODO: 更改错误代码以符合需要
        wprintf(L"错误: GetModuleHandle 失败\n");
        nRetCode = 1;
    }

    return nRetCode;
}

CMFCDLL::CMFCDLL(void)
{
}

extern "C" __declspec(dllexport) void Show() 
{ AFX_MANAGE_STATE(AfxGetStaticModuleState());
    CTest test; 
    test.DoModal();
}

5 在对话框工程里面添加MFCDLL的引用,并在对话框上面放置一个按钮,实现其按钮事件

void CDLG03222Dlg::OnBnClickedButton1()
{
	typedef void (WINAPI* TESTDLL)(); 
	HINSTANCE hmod; 
	hmod = ::LoadLibrary(_T("MFCDLL.dll")); 
	if (hmod == NULL) { AfxMessageBox(_T("Fail")); } 
	TESTDLL lpproc; 
	lpproc = (TESTDLL)GetProcAddress(hmod, "Show"); 
	if (lpproc != (TESTDLL)NULL) 
		(*lpproc)();
	FreeLibrary(hmod);
}

猜你喜欢

转载自blog.csdn.net/dxm809/article/details/115071975