效果如下:

  1. $ llbtest "E:\Developer\emgucv-windesktop 3.3.0.2824\libs\x64"
  2. LoadLibraryExW PATH: E:\Developer\emgucv-windesktop 3.3.0.2824\libs\x64
  3. E:\Developer\emgucv-windesktop 3.3.0.2824\libs\x64\concrt140.dll......[OK] ......Free: [OK]
  4. E:\Developer\emgucv-windesktop 3.3.0.2824\libs\x64\cvextern.dll......[OK] ......Free: [OK]
  5. E:\Developer\emgucv-windesktop 3.3.0.2824\libs\x64\msvcp140.dll......[OK] ......Free: [OK]
  6. E:\Developer\emgucv-windesktop 3.3.0.2824\libs\x64\opencv_ffmpeg330_64.dll......[OK] ......Free: [OK]
  7. E:\Developer\emgucv-windesktop 3.3.0.2824\libs\x64\vcruntime140.dll......[OK] ......Free: [OK]
  8. -- Completed --

llbtest.cs 源代码:

用csc llbtest.cs编译即可

  1. using System;
  2. using System.ComponentModel;
  3. using System.IO;
  4. using System.Runtime.InteropServices;
  5.  
  6. class Program
  7. {
  8. static void Main(string[] args)
  9. {
  10. if (args.Length == || args.Length > )
  11. {
  12. ShowHelp();
  13. return;
  14. }
  15. var path = args[];
  16. if (!Directory.Exists(path))
  17. {
  18. ShowHelp();
  19. return;
  20. }
  21.  
  22. var files = Directory.EnumerateFiles(path, "*.dll");
  23. Console.WriteLine($"LoadLibraryExW PATH: {path}");
  24. foreach (var file in files)
  25. {
  26. Console.Write(file);
  27. const int loadLibrarySearchDllLoadDir = 0x00000100;
  28. const int loadLibrarySearchDefaultDirs = 0x00001000;
  29. //const int loadLibrarySearchUserDirs = 0x00000400;
  30. IntPtr handler = NativeMethods.LoadLibraryExW(file, IntPtr.Zero, loadLibrarySearchDllLoadDir | loadLibrarySearchDefaultDirs);
  31. //IntPtr handler = LoadLibraryEx(dllname, IntPtr.Zero, loadLibrarySearchUserDirs);
  32. if (handler == IntPtr.Zero)
  33. {
  34. var error = Marshal.GetLastWin32Error();
  35. var ex = new Win32Exception(error);
  36. Console.WriteLine($"......[ERROR] {ex.NativeErrorCode}: {ex.Message}");
  37. }
  38. else
  39. {
  40. Console.Write($"......[OK] {handler}");
  41. var freeLibrary = NativeMethods.FreeLibrary(handler);
  42. Console.WriteLine($"......Free: {(freeLibrary ? "[OK]" : "[ERROR]")}");
  43. }
  44. }
  45. Console.WriteLine("-- Completed --");
  46. if(args.Length == && args[] == "...")
  47. {
  48. Console.Write("Press any key to exit...");
  49. Console.ReadKey(true);
  50. Console.WriteLine();
  51. }
  52. }
  53.  
  54. private static void ShowHelp()
  55. {
  56. var x = AppDomain.CurrentDomain.FriendlyName;
  57. Console.WriteLine($"Usage:\n\t{x} <path> [...]\n\tpath\tThe directory path that includes *.dll files\n\t...\tPause me when completed.");
  58. }
  59. }
  60.  
  61. [StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
  62. public struct HINSTANCE__
  63. {
  64.  
  65. /// int
  66. public int unused;
  67. }
  68.  
  69. public partial class NativeMethods
  70. {
  71.  
  72. /// Return Type: HMODULE->HINSTANCE->HINSTANCE__*
  73. ///lpLibFileName: LPCWSTR->WCHAR*
  74. ///hFile: HANDLE->void*
  75. ///dwFlags: DWORD->unsigned int
  76. [DllImport("kernel32.dll", EntryPoint = "LoadLibraryExW", SetLastError = true)]
  77. public static extern System.IntPtr LoadLibraryExW([In()] [MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPWStr)] string lpLibFileName, System.IntPtr hFile, uint dwFlags);
  78.  
  79. /// Return Type: BOOL->int
  80. ///hLibModule: HMODULE->HINSTANCE->HINSTANCE__*
  81. [DllImport("kernel32.dll", EntryPoint = "FreeLibrary")]
  82. [return: MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)]
  83. public static extern bool FreeLibrary([In()] System.IntPtr hLibModule);
  84. }

用 LoadLibraryExW 函数测试加载 dll (CSharp、Windows)的更多相关文章

  1. 在内存中加载DLL

    有个需求是把一个DLL作为数据打包到EXE中,运行的时候动态加载.但要求不是释放出来生成DLL文件加载. 花了一天时间做出来.效果还可以. 不过由于是直接分配内存加载DLL的.有一些小缺陷.例如遍历进 ...

  2. 动态链接库知识点总结之三(如何以显示的方式加载DLL)

    总结一下如何显示加载方式加载DLL, 首先,我们新建一个win32项目,选择dll,空项目,再添加一个源文件,一个模块定义文件(.def),具体如下图.(详细方法已经在前两篇文章中讲述,如有不懂,打开 ...

  3. c#动态加载dll文件

    1.在写一个记录日志到文件中的类库(生成dll文件copy到一个目录中去,然后在主函数的appconfig中去配置. using System; using System.Collections.Ge ...

  4. 内存加载DLL

    1.前言 目前很多敏感和重要的DLL(Dynamic-link library) 都没有提供静态版本供编译器进行静态连接(.lib文件),即使提供了静态版本也因为兼容性问题导致无法使用,而只提供DLL ...

  5. 无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)

    SQLite部署-无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块 近期刚使用SQLite,主要引用的是System.Data.SQLite.dll这个dll,在部署到测试 ...

  6. 加载dll过程中assembly失败

    错误现象: 进行插件读取时出现错误:“尝试从一个网络位置加载程序集,在早期版本的 .NET Framework 中,这会导致对该程序集进行沙盒处理.此发行版的 .NET Framework 默认情况下 ...

  7. SQLite部署-无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块

    近期刚使用SQLite,主要引用的是System.Data.SQLite.dll这个dll,在部署到测试环境时报无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块. (异常来 ...

  8. C++动态加载DLL调用方法

    一.构建DLL路径 char szTmp[_MAX_PATH]; char* szPath = getcwd(szTmp, _MAX_PATH);//获取当前工作目录  //构建dll路径  strc ...

  9. 关于Windows平台下应用程序加载DLL模块的问题.

    本文将讨论以下问题: (1)Windows可执行程序会从哪些目录下加载DLL. (2)如何将可执行使用的DLL放置到统一的目录下,而不是与EXE同一目录. (3)可执行程序加载了不该加载的DLL. ( ...

随机推荐

  1. 在VMW里安装Ghost操作系统遇到的问题及解决的办法

    条件:Ghost系列系统镜像文件 遇到的问题:1.导入镜像文件时提示“无法检测此光盘映像中的操作系统”: 2.分区时提示“ezboot kernel not found” 解决办法:1.直接先创建一个 ...

  2. django博客项目9

    ................

  3. JQuery操作select中的option

    html页面代码例如以下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...

  4. network FAQ

    @1: 参考 ifconfig eth0之后IP总是自动清除,解决方法, 修改vim /etc/network/interfaces 然后执行sudo /etc/init.d/networking r ...

  5. APP数据埋点分类方式

    1.数据埋点的重要性     在现实工作中,数据的整体流程为:数据生产-数据采集-数据处理-数据分析和挖掘-数据可视化,其中,数据采集是很重要的一个环节,数据采集得全不全.对不对,直接决定数据广度和质 ...

  6. django-admin自定义登录

    这个效果,单位代码是User model 的一个外键Company 通过修改form,然后在前端显示 修改form class AuthenticationForm(forms.Form): &quo ...

  7. (转)HttpWebRequest以UTF-8编码写入内容时发生“Bytes to be written to the stream exceed the Content-Length bytes size specified.”错误

    from:http://www.cnblogs.com/Gildor/archive/2010/12/13/1904060.html HttpWebRequest以UTF-8编码写入内容时发生“Byt ...

  8. LeetCode:括号的分数【856】

    LeetCode:括号的分数[856] 题目描述 给定一个平衡括号字符串 S,按下述规则计算该字符串的分数: () 得 1 分. AB 得 A + B 分,其中 A 和 B 是平衡括号字符串. (A) ...

  9. JS 原生JS 判断滚动条滑动到底部

    window.addEventListener("scroll", function(event) { var scrollTop = document.documentEleme ...

  10. adas--智能驾驶辅助系统

    先进驾驶辅助系统(Advanced Driver AssistantSystem),简称ADAS,是利用安装于车上的各式各样的传感器(可侦测光.热.压力等变数), 在第一时间收集车内外的环境数据, 进 ...