我試圖從C#UWP應用程序的非託管dll調用方法。我這樣做,但禁止在非託管dll上的「LoadLibrary()」,以便我可以使用它。使用從UWP C#應用程序撥動調用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裝載庫:
[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern IntPtr LoadLibrary(string librayName);
不幸的是,如果我添加 「ExactSpelling =真」,如下:
[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true, ExactSpelling = true)]
public static extern IntPtr LoadLibrary(string librayName);
然後調用它拋出一個異常:
System.EntryPointNotFoundEx ception:'無法在DLL'kernel32'中找到名爲'LoadLibrary'的入口點。'
任何幫助非常感謝!
事實上,有一個名爲'LoadLibrary'在'kernel32.dll'沒有入口點。還有兩個:用於ANSI字符串的'LoadLibraryA'和用於Unicode字符串的'LoadLibraryW'。你想要後者。儘管如此,不保證它可以工作。從我收集你應該在UWP上使用['LoadPackagedLibrary'](https://msdn.microsoft.com/library/windows/desktop/hh447159)(但我不是UWP開發人員)。 –
LoadLibraryW()在UWP應用程序中是* verboten *。您無法通過應用認證,也無法通過商店進行銷售和部署。 –
你確定嗎?我可以通過[DllImport(「API-MS-WIN-CORE-LIBRARYLOADER-L2-1-0.DLL」,SetLastError = true)]導入來加載LoadLibraryW。 – TheJeff