C # EntryPointNotFoundException Unable to find entry point named 'SetDllDirectory' in DLL 'kernel32.dll'

I am trying to use several functions from the kernal32.dll file. However, when my application tries to call the first function, it throws an EntryPointNotFoundException elementUnable to find an entry point named 'SetDllDirectory' in DLL 'kernel32.dll'.

public class MyClass
{
    /// <summary>
    /// Use to interface to kernel32.dll for dynamic loading of similar DLLs.
    /// </summary>
    internal static class UnsafeNativeMethods
    {
        [DllImport("kernel32.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
        internal static extern IntPtr LoadLibrary(string lpFileName);

        [DllImport("kernel32.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
        internal static extern bool SetDllDirectory(string lpPathName);

        [DllImport("kernel32.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
        internal static extern IntPtr GetProcAddress(IntPtr hModule, string procName);
    }

    private void MyFunc()
    {
        if (UnsafeNativeMethods.SetDllDirectory(_location) == false) // <-- Exception thrown here.
        {
            throw new FileNotFoundException(_location);
        }

        /* Some code. */

        _dllHandle = UnsafeNativeMethods.LoadLibrary(_fullPath);

        /* Some more code. */

        _fptr = UnsafeNativeMethods.GetProcAddress(_dllHandle, _procName);

        /* Yet even more code. */
    }
}

Any thoughts on what I am doing wrong and how I can get a job will be greatly appreciated. Thank.

+3
source share
2 answers

ExactSpelling. - SetDllDirectoryW. CharSet.Auto, Ansi - , . Windows XP SP1.

+7

DllImport, , ExactSpelling, .

0

Source: https://habr.com/ru/post/1765662/


All Articles