添加引用库目录
指定dll搜索目录,即运行目录下的所有子目录,并使用windows中的API将这些子目录都加到dll搜索路径列表中。
将使用到kernel32.dll中的SetDllDirectory、AddDllDirectory和SetDefaultDllDirectories
SetDllDirectory用于指定设置系统搜索路径
AddDllDirectory用于提交用户定义的系统所有路径
关键在于SetDefaultDllDirectories,用于指定需要所有路径的类型,这里填
SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_APPLICATION_DIR
| LOAD_LIBRARY_SEARCH_DEFAULT_DIRS
| LOAD_LIBRARY_SEARCH_SYSTEM32
| LOAD_LIBRARY_SEARCH_USER_DIRS);//其他类型见枚举
我们将这些指定的代码封装到公共类中,也就是在core.dll里面,这也是为什么要将core.dll暴露在最外层。
在程序运行时,还没有调用这些设置依赖路径的函数之前,是只能找到根目录下的dll的,除非把设置依赖的代码写在main函数入口,否则必须要将core.dll放到根目录下。
1.为什么要分包
最近项目中有应用到比较多的项目dll和第三方dll,之前是都放在exe的平级目录下的,当dll多到一定程度时,会非常的乱。有一些库已经没有用到了,但由于第三方库直接没有归类,也不知道那些库是必须引用的,因此也没有清理。
时间久了,整个目录下会显得杂乱无章,命名规范互相不同。
由于项目用到了C#和C++两种语言,因此dll还存在不同的类型。
虽然DLL乱不影响整体软件使用,但对于强迫症来说还是相当难受的。
为了方便管理,研究出了一种dll分包依赖的管理技术,解决依赖的dll存在杂乱的问题。
2.如何分包
1.确定编译位置
首先将项目中各模块的编译位置指定到需要分包的结构,例如本项目中的分包结构,就是在libs/x64下的分包结构,将core暴露在最外层
转发,https://blog.csdn.net/VCMamba/article/details/124730792