我正在尝试从C# UWP应用程序调用未托管的dll中的方法。为此,我会对未托管的dll进行引用,使用pinvoke中的“LoadLibrary()”。
在调试模式下,这一切都可以正常工作。然而,在发布模式下,我遇到了一个奇怪的错误:
消息: 类初始化方法Tests.UnitTests.InitializeClient抛出异常。System.TypeLoadException: System.TypeLoadException: 由于UWP应用程序不支持,“Client, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”程序集中未解析的P/Invoke方法“LoadLibrary!kernel32”。请使用另一个API或使用[DllImport(ExactSpelling=true)]来表明您理解使用非UWP应用程序API的含义。
这是我的pinvoke Load Library方法:
[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern IntPtr LoadLibrary(string librayName);
很抱歉,如果我添加“ExactSpelling=true”如下所示:
不幸的是:
[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true, ExactSpelling = true)]
public static extern IntPtr LoadLibrary(string librayName);
然后调用它将会抛出一个异常:
System.EntryPointNotFoundException:“无法在 DLL 'kernel32' 中找到名为 'LoadLibrary' 的入口点。”
非常感谢任何帮助!
kernel32.dll
中没有名为LoadLibrary
的入口点。但有两个其他的入口点:用于 ANSI 字符串的LoadLibraryA
和用于 Unicode 字符串的LoadLibraryW
。你需要用后者。虽然不保证它能正常工作。根据我所了解的,如果你是 UWP 开发人员,应该使用LoadPackagedLibrary
。 - Jeroen Mostert