gpt4 book ai didi

C# EntryPointNotFoundException 无法在 DLL 'SetDllDirectory' 中找到名为 'kernel32.dll' 的入口点

转载 作者:行者123 更新时间:2023-11-30 13:51:53 26 4
gpt4 key购买 nike

我正在尝试使用 kernal32.dll 中的几个函数。但是,当我的应用程序尝试调用第一个函数时,它会抛出 EntryPointNotFoundException 无法在 DLL“kernel32.dll”中找到名为“SetDllDirectory”的入口点。

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. */
}
}

任何关于我做错了什么以及如何让它工作的想法都将不胜感激。谢谢。

最佳答案

您必须删除 ExactSpelling 属性。该函数的真实名称是 SetDllDirectoryW。我还建议您使用 CharSet.Auto,使用 Ansi 是一种有损转换,可能会导致微妙的问题。导出功能在 XP SP1 之前的任何 Windows 版本中都不可用。

关于C# EntryPointNotFoundException 无法在 DLL 'SetDllDirectory' 中找到名为 'kernel32.dll' 的入口点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3753306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com