我正在尝试从C#UWP应用程序中调用非托管dll中的方法。我这样做,但在非托管dll上使用“LoadLibrary()”,以便我可以使用它。
这在调试模式下工作正常,但在发布模式下,我收到一个奇怪的错误:
消息:类初始化方法Tests.UnitTests.InitializeClient引发异常。 System.TypeLoadException:System.TypeLoadException:程序集'Client,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'中未解析的P / Invoke方法'LoadLibrary!kernel32',因为它在UWP应用程序中不可用。请使用另一个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'的入口点。'
非常感谢任何帮助!
答案 0 :(得分:2)
改为使用LoadPackagedLibrary:
[DllImport("API-MS-WIN-CORE-LIBRARYLOADER-L2-1-0.DLL", SetLastError = true)]
public static extern IntPtr LoadPackagedLibrary([MarshalAs(UnmanagedType.LPWStr)]string libraryName, int reserved = 0);