C# 加载dll时出错:D:\\xulRunner\\freebl3.dll,错误-18

C# 加载dll时出错:D:\\xulRunner\\freebl3.dll,错误-18,c#,C#,LoadLibraryEx方法引发了一个异常,因为在加载dll期间出现错误:D:\xulRunner\freebl3.dll,错误-18。但是文件存在 有人知道那是什么意思吗 代码: 您正在加载本机库/DLL还是.NET库/DLL?如果你在做本地工作,我强烈建议你添加一个标签 这篇文章可能会有所帮助。虽然有点旧,但这方面的情况没有太大变化。我认为您可以通过使用dynamic使解决方案变得更好,但这不是我尝试过的 祝你好运, 埃里克 string XulRunnerPath = @"D:\xulR

LoadLibraryEx方法引发了一个异常,因为在加载dll期间出现错误:D:\xulRunner\freebl3.dll,错误-18。但是文件存在

有人知道那是什么意思吗

代码:


您正在加载本机库/DLL还是.NET库/DLL?如果你在做本地工作,我强烈建议你添加一个标签

这篇文章可能会有所帮助。虽然有点旧,但这方面的情况没有太大变化。我认为您可以通过使用dynamic使解决方案变得更好,但这不是我尝试过的

祝你好运, 埃里克

string XulRunnerPath = @"D:\xulRunner";

            string[] files = Directory.GetFiles(XulRunnerPath, "*.dll");
            foreach (var file in files)
            {
                LoadWin32Library(file);
            }


[DllImport("kernel32.dll")]
        private static extern IntPtr LoadLibraryEx(string dllFilePath, IntPtr hFile, uint dwFlags);

        [DllImport("kernel32.dll")]
        public extern static bool FreeLibrary(IntPtr dllPointer);

        static uint LOAD_LIBRARY_AS_DATAFILE = 0x00000002;
        static uint LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = 0x00000040;
        static uint LOAD_WITH_ALTERED_SEARCH_PATH = 0x00000008;

        public static IntPtr LoadWin32Library(string dllFilePath)
        {
            try
            {
                System.IntPtr moduleHandle = LoadLibraryEx(dllFilePath, IntPtr.Zero, LOAD_WITH_ALTERED_SEARCH_PATH);
                if (moduleHandle == IntPtr.Zero)
                {
                    // I'm gettin last dll error
                    int errorCode = Marshal.GetLastWin32Error();
                    throw new ApplicationException(
                        string.Format("There was an error during dll loading : {0}, error - {1}", dllFilePath, errorCode)
                        );
                }

                return moduleHandle;
            }
            catch (Exception exc)
            {
                throw new Exception(String.Format("Couldn't load library {0}{1}{2}", dllFilePath, Environment.NewLine, exc.Message), exc);
            }
        }