zoukankan      html  css  js  c++  java
  • 用 LoadLibraryExW 函数测试加载 dll (CSharp、Windows)

    效果如下:

    $ llbtest "E:Developeremgucv-windesktop 3.3.0.2824libsx64"
    LoadLibraryExW PATH: E:Developeremgucv-windesktop 3.3.0.2824libsx64
    E:Developeremgucv-windesktop 3.3.0.2824libsx64concrt140.dll......[OK] 140734063771648......Free: [OK]
    E:Developeremgucv-windesktop 3.3.0.2824libsx64cvextern.dll......[OK] 140733428531200......Free: [OK]
    E:Developeremgucv-windesktop 3.3.0.2824libsx64msvcp140.dll......[OK] 140734063509504......Free: [OK]
    E:Developeremgucv-windesktop 3.3.0.2824libsx64opencv_ffmpeg330_64.dll......[OK] 1724645376......Free: [OK]
    E:Developeremgucv-windesktop 3.3.0.2824libsx64vcruntime140.dll......[OK] 140734064033792......Free: [OK]
    -- 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 == 0 || args.Length > 2)
    11         {
    12             ShowHelp();
    13             return;
    14         }
    15         var path = args[0];
    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 == 2 && args[1] == "...")
    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:
    	{x} <path> [...]
    	path	The directory path that includes *.dll files
    	...	Pause me when completed.");
    58     }
    59 }
    60 
    61 
    62 
    63 
    64 
    65 [StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
    66 public struct HINSTANCE__
    67 {
    68 
    69     /// int
    70     public int unused;
    71 }
    72 
    73 public partial class NativeMethods
    74 {
    75 
    76     /// Return Type: HMODULE->HINSTANCE->HINSTANCE__*
    77     ///lpLibFileName: LPCWSTR->WCHAR*
    78     ///hFile: HANDLE->void*
    79     ///dwFlags: DWORD->unsigned int
    80     [DllImport("kernel32.dll", EntryPoint = "LoadLibraryExW", SetLastError = true)]
    81     public static extern System.IntPtr LoadLibraryExW([In()] [MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPWStr)] string lpLibFileName, System.IntPtr hFile, uint dwFlags);
    82 
    83 
    84     /// Return Type: BOOL->int
    85     ///hLibModule: HMODULE->HINSTANCE->HINSTANCE__*
    86     [DllImport("kernel32.dll", EntryPoint = "FreeLibrary")]
    87     [return: MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)]
    88     public static extern bool FreeLibrary([In()] System.IntPtr hLibModule);
    89 }
  • 相关阅读:
    hdu 4027 Can you answer these queries? 线段树
    ZOJ1610 Count the Colors 线段树
    poj 2528 Mayor's posters 离散化 线段树
    hdu 1599 find the mincost route floyd求最小环
    POJ 2686 Traveling by Stagecoach 状压DP
    POJ 1990 MooFest 树状数组
    POJ 2955 Brackets 区间DP
    lightoj 1422 Halloween Costumes 区间DP
    模板 有源汇上下界最小流 loj117
    模板 有源汇上下界最大流 loj116
  • 原文地址:https://www.cnblogs.com/Bob-wei/p/7765319.html
Copyright © 2011-2022 走看看