gpt4 book ai didi

c# - 如何在 WinRT 8.1 上 P/调用 kernel32.dll

转载 作者:太空狗 更新时间:2023-10-29 22:22:20 24 4
gpt4 key购买 nike

我正在尝试使用 native API 方法 (GetNativeSystemInfo),该方法被标记为支持 Windows 8.1 上的手机和桌面应用商店应用。在文档中,它被列为存在于 kernel32.dll 中。伟大的!所以我对 P/Invoke 的第一次尝试是这样的:

[DllImport("kernel32.dll", CharSet = CharSet.Unicode, ExactSpelling = false, PreserveSig = true)]
private static extern void GetNativeSystemInfo(ref SYSTEM_INFO lpSysInfo);

不幸的是,这无法在实际设备上运行 - 找不到 kernel32!碰巧有 kernelBase.dll,因此我的第二次尝试:

[DllImport("kernelBase.dll", CharSet = CharSet.Unicode, ExactSpelling = false, PreserveSig = true)]
private static extern void GetNativeSystemInfo(ref SYSTEM_INFO lpSysInfo);

虽然这在我的手机上运行良好,但它会导致应用程序无法通过认证;方法名称和“kernelBase.dll”似乎没有列入白名单。

这是 WACK 的疏忽,还是导致此 API 在商店应用程序中无法使用的错误?我的目标是获取有关正在运行的处理器的信息(体系结构、类型等),我不想为了这么简单的事情而使用 C++。如果此 API 在实践中不可用,是否有其他方法获取此信息?

最佳答案

Windows Phone 和 Windows 应用商店版本需要不同的 pinvoke 签名。对于来自 api-ms-win-core-sysinfo-l1-2-0.dll 的电话引用 GetNativeSystemInfo

#if WINDOWS_PHONE_APP
[DllImport("api-ms-win-core-sysinfo-l1-2-0.dll", CharSet = CharSet.Unicode, ExactSpelling = false, PreserveSig = true)]
private static extern void GetNativeSystemInfo(ref SYSTEM_INFO lpSysInfo);
#else
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, ExactSpelling = false, PreserveSig = true)]
private static extern void GetNativeSystemInfo(ref SYSTEM_INFO lpSysInfo);
#endif

参见 Supported Win32 APIs for Windows Phone 8列表(针对 SL,但也适用于您的运行时应用程序)。如果您 native 调用该函数,将自动引用正确的引用,但没有工具可以为 pinvoke 这样做。通常,将函数包装在 native Windows 运行时组件中比 p-invoke 更容易,除非您只有几个简单的 p-invoke。

关于c# - 如何在 WinRT 8.1 上 P/调用 kernel32.dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28464217/

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