2017-03-23 47 views
5

Sử dụng syscall trong Tìm hiểu cách tôi có thể gọi UWP API trong Windows 10? Tôi đã xem và thử nhiều ví dụ: win32, nhưng khi tôi đã thử sử dụng System.WindowsRuntime.dll thì đó là một sự cố; Cụ thể, tôi nhận được:Golang: sử dụng Windows 10 API/UWP/System.WindowsRuntime?

panic: Failed to load System.WindowsRuntime.dll: The specified module could not be found. 

(điều này là trong thời gian chạy, nhị phân được xây dựng tốt)

tôi đã cố gắng xây dựng cả với một tiêu chuẩn go build cũng như mã

go build -ldflags="-H windows" 

dụ:

var(
    windowsRuntime  = syscall.NewLazyDLL("System.WindowsRuntime.dll") 
    getDiskFreeSpace = windowsRuntime.NewProc("GetDiskFreeSpace") 
) 

Lưu ý: các biến thể khác thử:

windowsRuntime  = syscall.NewLazyDLL("System.Runtime.WindowsRuntime.dll") 

&

windowsRuntime  = syscall.NewLazyDLL("WindowsRuntime.dll") 

Bất cứ ai cũng có thể nhận được chạy này hoặc có lời khuyên nào về vấn đề này? Như mọi khi, rất nhiều được đánh giá cao !!

+1

GetDiskFreeSpace sống trong kernel32.dll (xem https://msdn.microsoft.com/en-us/library/windows/desktop/aa364935(v=vs.85).aspx). Vì vậy, bạn nên có windowsRuntime = syscall.NewLazyDLL ("kernel32.dll") – alex

+0

Có, bạn đã lấy 'System.WindowsRuntime.dll' từ đâu? Bạn đang cố gắng gọi phương thức 'GetDiskFreeSpace()' của một lớp UWP cụ thể? Nếu vậy, bạn đang ở trong một thế giới bị tổn thương ... – andlabs

+0

Phải, bạn là 'kernel32.dll', không chắc là tôi lấy nó từ đâu, tôi đang cố gắng truy xuất lại các bước của mình, trong mọi trường hợp, Không tìm thấy System.WindowsRuntime.dll' với 'panic: Không tải được System.WindowsRuntime.dll: Không thể tìm thấy mô-đun được chỉ định.' trong khi khi tôi có tên hàm/thủ tục sai' GetDiskFreeSpace' tôi nhận được 'hoảng loạn: Không thành công để tìm thủ tục GetDiskFreeSpace trong Kernel32.dll: Không thể tìm thấy quy trình được chỉ định.' Vì vậy, 'System.WindowsRuntime.dll' chắc chắn bị thiếu. Bây giờ chỉ để tìm ra nơi mà nếu đó là ngay cả tên thích hợp. Tôi sẽ liên lạc lại với bạn một thời gian ngắn. – ehiller

Trả lời

0

Tôi không biết nơi bạn tìm thấy "System.WindowsRuntime.dll" bởi vì theo như tôi có thể nói, nó không tồn tại (trừ khi bạn tự tạo DLL có tên đó).

Đối với System.Runtime.WindowsRuntime.dll: đó là một phần của .NET Framework, không phải Windows và đó là một DLL được quản lý. Bạn không thể tải các DLL như vậy bằng syscall.NewLazyDLL. Hơn nữa, DLL đó không thực sự chứa bất kỳ API Windows nào - chỉ cần dán cho .NET để có thể làm việc với chúng.

Có thể bạn đang tìm kiếm các chức năng như RoGetActivationFactory trong combase.dll.

Các vấn đề liên quan