父窗调用子界面(点击父窗口某个控件调用子界面)

通过点击父窗口某个控件调用子界面,子界面的调用方式是:将子界面的dll文件名称、类名和导出函数名传递给父界面对应的函数,并最终返回子界面的参数给父界面。

1、用于从动态链接库(DLL)中获取函数指针并调用该函数

int CParentDlg::GetChildParameterFun(HINSTANCE m_hDll, CString className, CString funName)  //参数包括DLL实例句柄 m_hDll,类名 className 和函数名 funName。

{

    // 获取导出函数指针

    if (strcmp(className, "CTestDlg") == 0)

    {

        typedef void (*hpDllFun)(std::vector<CString>*);  //定义一个函数指针类型 hpDllFun,该函数指针指向的函数接受一个 std::vector<CString>* 类型的指针

        hpDllFun pShowDlg = (hpDllFun)GetProcAddress(m_hDll, funName); //从DLL中获取名为 funName 的函数指针,并将其转换为 hpDllFun 类型。

        if (NULL == pShowDlg)

        {

            MessageBox("DLL中函数寻找失败");

            return 0;

        }

        // 获取导出类对象指针

        std::vector<CString>* parameters = new std::vector<CString>(); //创建一个新的 std::vector<CString> 对象,用于存储参数。

        pShowDlg(parameters); //调用获取的函数指针,传入 parameters

        FreeLibrary(m_hDll);  //释放DLL。

    }

}

2、定义了一个导出函数 TestDlg,用于显示一个模态对话框 CTestDlg ,并将对话框的输出结果传递给调用者提供的 parameters容器

//这是一个C风格的导出函数,返回类型为 void,参数为 std::vector<CString>* parameters。

extern "C" __declspec(dllexport)void TestDlg(std::vector<CString>* parameters)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    CTestDlg dlg();
    
    dlg.DoModal();  //以模态对话框的方式显示 dlg。模态对话框会阻塞调用线程,直到对话框关闭。
    parameters->assign(dlg.parameters.begin(), dlg.parameters.end());  //将对话框 dlg 中的 parameters 结果赋值给传入的 parameters 容器。
}

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值