MFC扩展DLL项目生成的DLL被调用出现的问题汇总

本文详细总结了MFC扩展DLL在使用过程中遇到的各种问题,包括资源ID冲突、自定义控件使用问题、内存泄漏等,并提供了具体的解决策略。通过调整头文件包含、显示加载DLL、设置资源ID、修复构造函数和析构函数访问权限等方式,可以有效地解决这些问题。
摘要由CSDN通过智能技术生成

       在MFC DLL中有三种项目类型:使用共享MFC DLL的常规DLL、MFC扩展DLL、静态链接MFC的常规DLL。其中“MFC扩展DLL”主要针对MFC项目而提供DLL接口的,其作用可以生成普通的类,MFC包括界面的资源即对话框也可以被生成DLL文件供给主调用者程序使用。

MFC扩展DLL的使用步骤:

1.如果单纯建立MFC项目,就使用MFC扩展DLL项目就好。

2.接口使用:提供DLL头文件(包含要使用的函数等)、DLL文件、lib文件给主调用方。(2)若要整个程序调用dll函数都有作用,就在stdafx.h头文件添加“#include "xx.h"的dll头文件”、“#pragma comment(lib,"xx.lib")”。

3.而对于有资源的DLL项目,意思是包含对话框资源的MFC扩展DLL,开发者在其主调用方要使用的DLLL头文件不要include有资源ID的文件,比如DLL项目的对话框类,否则就会报出“某某ID未定义标识符”。

解决问题的方式有三种:

(1)开发者使用普通类(即没有资源并且不是MFC的类,指没有包含对话框类),不要在普通类头文件引用资源类文件,而应在普通类的源文件进行包含资源类,然后在源文件对资源类进行创建对象并初始化。

在DLL项目要导出的类头文件:

//这是个普通类的文件,并没有包含资源的类
#include "Control.h"//需要在主调用方的项目添加该头文件

#pragma once
class AFX_EXT_CLASS CUseLoginDll
{
public:
	CUseLoginDll(void);
	~CUseLoginDll(void);
	void ShowLoginDlg();
public:
    CControl CCtrlPtr;
};

在DLL项目要导出的类源文件:

#include "StdAfx.h"
#include "UseLoginDll.h"
#include "LoginDlg.h"//在这里可以引用有资源的类
CUseLoginDll::CUseLoginDll(void)
{
	 CCtrlPtr=new CControl();
}

CUseLoginDll::~CUseLoginDll(void)
{
	CCtrlPtr=NULL;
}
void CUseLoginDll::ShowLoginDlg()//在这里创建DLL项目里的对话框
{
CLoginDlg d;
d.DoModal(CCtrlPtr);
}

主调用方引用的代码示例:
 

//假设UserLoginDll.h是DLL项目自定义的普通类。
//在TestDlg源文件添加#include "UserLoginDll.h",表示引用UseLoginDll.h
//在TestDlg源文件添加全局变量:CUserLoginDll login;
///
#include "UserLoginDll.h"
CUserLoginDll login;
void TestDlg::Onclick()
{
    HINSTANCE exe_hInstance = GetModuleHandle(NULL);//用对象保存主调用者的句柄
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值