DLL中导出对话框

DLL中导出对话框

建立Win32工程-->DLL->MFC的支持

加入一个对话框,增加对应类

正常导出一个函数,如下
 
MSDN说明:
The AFX_MODULE_STATE structure contains global data for the module, that is, the portion of the module state that is pushed or popped. 
By default, MFC uses the resource handle of the main application to load the resource template. If you have an exported function in a DLL, such as one that launches a dialog box in the DLL, this template is actually stored in the DLL module. You need to switch the module state for the correct handle to be used. You can do this by adding the following code to the beginning of the function:
Visual C++  Copy Code 
AFX_MANAGE_STATE(AfxGetStaticModuleState( )); 
This swaps the current module state with the state returned from AfxGetStaticModuleState until the end of the current scope.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在MFC工程调用DLL对话框,需要进行以下步骤: 1. 在MFC工程的资源文件夹创建一个对话框资源文件(.dlg)。 2. 编写一个导出函数,在该函数创建并显示上述对话框,并将其作为返回值返回。 3. 在DLL代码添加导出函数的定义和声明,可以使用__declspec(dllexport)声明该函数为导出函数。 4. 在MFC工程使用LoadLibrary函数加载该DLL,并使用GetProcAddress函数获取导出函数的地址。 5. 使用获得的函数指针调用导出函数,获取对话框句柄并显示对话框。 6. 对话框处理完成后,调用EndDialog函数将结果返回给MFC工程。 通过上述步骤,就可以在MFC工程调用DLL对话框了。需要注意的是,在使用DLL的资源文件时,必须在MFC应用程序调用AfxSetResourceHandle以确保使用正确的资源句柄。 ### 回答2: MFC是微软公司开发的一套基于Windows操作系统的应用程序框架。在MFC,可以使用CDialog类创建对话框DLL是一种动态链接库,它允许在不同的应用程序之间共享代码和数据。假设现在需要在MFC调用DLL对话框,则可以按照以下步骤进行操作: 1. 在DLL创建对话框 首先,在DLL创建一个对话框资源,并使用CDialog类派生一个对话框类。例如: class CDllDialog : public CDialog { public: CDllDialog(CWnd* pParent = NULL); enum { IDD = IDD_DLGDIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); DECLARE_MESSAGE_MAP() }; 在此类,可以根据需要添加控件和处理函数。 2. 在DLL导出对话框类 接下来,需要在DLL对话框导出,以便能够在MFC使用。在DLL添加以下代码: extern "C" __declspec(dllexport) CDialog* CreateDialog() { return new CDllDialog(); } 此代码将CreateDialog函数导出为一个公共的DLL函数,并返回一个CDllDialog对象。 3. 在MFC调用DLL对话框 现在,在MFC可以使用以下代码调用DLL对话框: #include "windows.h" #include "afxwin.h" typedef CDialog* (*fnCreateDialog)(); void CallDllDialog() { HMODULE hDll = LoadLibrary(_T("mydll.dll")); if (hDll != NULL) { fnCreateDialog pfnCreateDialog = (fnCreateDialog)GetProcAddress(hDll, "CreateDialog"); if (pfnCreateDialog != NULL) { CDialog* pDlg = (*pfnCreateDialog)(); if (pDlg != NULL) { pDlg->DoModal(); delete pDlg; } } FreeLibrary(hDll); } } 此代码首先使用LoadLibrary函数加载DLL文件,然后使用GetProcAddress函数获取CreateDialog函数的指针。如果成功获取到函数指针,则可以使用该函数创建CDllDialog对象,并调用DoModal函数显示对话框。 总之,调用DLL对话框需要在DLL创建对话框类并导出,然后在MFC使用LoadLibrary函数和GetProcAddress函数获取函数指针,并创建对话框对象进行操作。 ### 回答3: 在MFC可以使用LoadLibrary函数来加载DLL,并且使用GetProcAddress函数来获取DLL的函数地址,然后调用该DLL的函数实现对话框的调用。 以下是实现步骤: 1. 定义DLL的头文件 首先需要在MFC工程定义DLL的头文件,包含DLL的函数声明和结构体定义等内容。 2. 加载DLL 在需要使用DLL函数的地方调用LoadLibrary函数来加载DLL,并保存句柄。 HINSTANCE hDll = LoadLibrary(L"MyDialog.dll"); 3. 获取函数地址 使用GetProcAddress函数获取DLL需要调用的函数的地址。在DLL对话框导出函数名为“ShowMyDialog”,因此可以使用以下代码获取该函数的地址。 typedef void (*PFDialogFunc)(); PFDialogFunc pFunc = (PFDialogFunc)GetProcAddress(hDll, "ShowMyDialog"); 4. 调用函数 获取到函数地址以后就可以通过函数指针来调用该函数,并显示对话框。 if (pFunc != NULL) { (*pFunc)(); } 在DLL定义的导出函数需要以“__declspec(dllexport)”修饰符进行修饰,例如: __declspec(dllexport) void ShowMyDialog() { CMyDialog dlg; dlg.DoModal(); } 需要注意的是,如果DLL对话框涉及到资源(如图片等),需要将资源文件一并打包到DLL。另外,DLL的编译选项也需要与主工程保持一致。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值