如何将多个dll封装到一个dll中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将多个dll封装到一个dll中相关的知识,希望对你有一定的参考价值。

参考技术A 在做.Net底层编码过程中,为了功能独立,有可能会生成多个DLL,引用时非常不便。这方面微软提供了一个ILMerge工具原版DOS工具,可以将多个DLL合并成一个。下载完成后需要安装一下,然后通过DOS命令进入。具体用法如下:D:\ProgramFiles\Microsoft\ILMergeilmerge/log:log.txt/targetplatform:v4/out:merge.dllAnalysisLibrary.dllUSBClassLibrary.dll说明:此操作的目的是:将当前目录下的AnalysisLibrary.dll和USBClassLibrary.dll类库,按照.NetFramework 4.0形式(V4)合并成merge.dll。其中:/log:log.txt命令是将生成过程中的日志,写入到log.txt文件中。.dll:是输出文件。本回答被提问者采纳

将FormView视图封装到DLL中

在多文档编程框架中,要显示多个视图,如果将视图类封装到DLL中,调用时将视图嵌入到主框架中,能实现模块编程。

(1)创建一个MFC的控展DLL工程,在资源中添加一个FormView窗口,并创建相应的类CDeviceManageView。添导出函数如下:

extern "C" AFX_EXT_API UINT Create(CRuntimeClass * * view,CWnd * p)
{
	new CDynLinkLibrary(DeviceManageDLL);
	*view = RUNTIME_CLASS(CDeviceManageView);
	return(0);
}

(2)调用DLL函数创建视图

HINSTANCE hDllInst = AfxLoadLibrary(CScale3DCGlobal::GetApplicationPath() 
                     + _T("\\DeviceManage.DLL"));
if (hDllInst)
{
	typedef UINT(*MYFUNC)(CRuntimeClass**,CWnd *parent);
	MYFUNC CreateViewUI = NULL;
	CreateViewUI = (MYFUNC)GetProcAddress(hDllInst, "Create");
	if (CreateViewUI)
	{
		CRuntimeClass* pNewViewClass;
		CreateViewUI(&pNewViewClass,AfxGetMainWnd());
		ASSERT(pNewViewClass);

		CCreateContext context;
		context.m_pNewViewClass = pNewViewClass;
		pChildFrame = new CScale3DCChildFrame;
		if (!pChildFrame->LoadFrame(32000,//与DLL中的资源ID一致
			WS_OVERLAPPEDWINDOW | FWS_PREFIXTITLE, AfxGetMainWnd(), &context))
			return;
			pChildFrame->SetWindowText(_T("通信连接"));
			pChildFrame->InitialUpdateFrame(NULL, TRUE);
		}
		//FreeLibrary(hDllInst);
	}
}


以上是关于如何将多个dll封装到一个dll中的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个dll封装到一个dll中

将FormView视图封装到DLL中

怎么将qt的开源库封装成dll

ilmerge 可以将c++的dll合并吗

c#如何合并多个dll文件

如何包含具有多个 dll/dylib 的外部(共享)库