【发布时间】:2017-08-16 04:20:52
【问题描述】:
在 Go 中使用 syscall 如何在 Windows 10 中调用 UWP API?我已经看过并尝试了许多 win32 示例,但是当我尝试使用 System.WindowsRuntime.dll 时,它是不行的;具体来说,我收到了:
panic: Failed to load System.WindowsRuntime.dll: The specified module could not be found.
(这是在运行时,二进制构建良好)
我尝试使用标准 go build 以及
go build -ldflags="-H windows"
示例代码:
var(
windowsRuntime = syscall.NewLazyDLL("System.WindowsRuntime.dll")
getDiskFreeSpace = windowsRuntime.NewProc("GetDiskFreeSpace")
)
注意:尝试了其他变体:
windowsRuntime = syscall.NewLazyDLL("System.Runtime.WindowsRuntime.dll")
&
windowsRuntime = syscall.NewLazyDLL("WindowsRuntime.dll")
有人能够让这个运行或对此事有任何建议吗? 一如既往,非常感激!!
【问题讨论】:
-
GetDiskFreeSpace 位于 kernel32.dll 中(参见 msdn.microsoft.com/en-us/library/windows/desktop/… )。所以你应该有 windowsRuntime = syscall.NewLazyDLL("kernel32.dll")
-
是的,你从哪里得到
System.WindowsRuntime.dll?您是否尝试调用特定 UWP 类的GetDiskFreeSpace()方法?如果是这样,你将进入一个受伤的世界...... -
是的 -
kernel32.dll它是,不知道我从哪里得到的,我试图追溯我的步骤,无论如何,System.WindowsRuntime.dll没有找到panic: Failed to load System.WindowsRuntime.dll: The specified module could not be found.而当我有错误的函数/过程名称GetDiskFreeSpace我收到panic: Failed to find GetDiskFreeSpace procedure in Kernel32.dll: The specified procedure could not be found.所以System.WindowsRuntime.dll肯定丢失了。现在只是想弄清楚这是否是正确的名称。我会尽快回复您。 -
顺便说一句,您必须使用 Unicode 函数名称,这就是找不到该过程的原因——所以
GetDiskFreeSpaceW你会很好——以防其他人遇到这个问题.
标签: winapi go windows-runtime uwp winrt-xaml