c++加载其他目录dll依赖SetDllDirectory,vb6找不到dll

添加引用库目录

指定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

 

你可能感兴趣的:(c++,c语言)