Golang:如何在没有cgo的情况下调用win32 API?

ug

我试图调用GetUserNameExsecur32.dll这样的:

dll, err := syscall.LoadDLL("secur32.dll")
if err != nil {
    log.Fatal(err)
}
defer dll.Release()

GetUserNameEx, err := dll.FindProc("GetUserNameExW")
if err != nil {
    log.Fatal(err)
}
arr := make([]uint8, 256)
var size uint
GetUserNameEx.Call(3, uintptr(unsafe.Pointer(&arr[0])), uintptr(unsafe.Pointer(&size)))
fmt.Println(arr)
fmt.Println(size)

这段代码可以正常编译,但是GetUserNameEx.Call()会失败。我不知道为什么我无法得到UserName有人可以帮我吗?

icza

size是输入输出参数。进行呼叫时,必须将其设置为缓冲区(arr的大小它的类型也是PULONG,所以在Go中使用uint32WindowsPULONG类型是指向的指针ULONG(具有range 0..4294967295)。参见来源

Call()返回3个值:

func (p *Proc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error)

存储返回lastErr并打印。完成此操作后,您会更早发现错误:

_, _, lastErr := GetUserNameEx.Call(
    3, uintptr(unsafe.Pointer(&arr[0])), uintptr(unsafe.Pointer(&size)))

fmt.Println(lastErr)

印刷:

More data is available.

这意味着更多的数据比什么适合入缓冲区您传递可用-或者更确切地说-您用IN-OUT参数指示的大小size(你通过0size)。

工作代码(请注意,由于unicode被2除,'\0'对于大小计算,终止字节/字符为负1 ):

arr := make([]uint8, 256)
var size uint32 = uint32(len(arr)) / 2 - 1
_, _, lastErr := GetUserNameEx.Call(
    3, uintptr(unsafe.Pointer(&arr[0])), uintptr(unsafe.Pointer(&size)))

fmt.Println(lastErr)
fmt.Println(string(arr))
fmt.Println(arr)
fmt.Println(size)

在这种情况下lastErr将是:

The operation completed successfully.

要正确处理错误:

返回的错误始终是非错误的nil,由的结果构成GetLastError调用者必须在查询错误之前检查主返回值,以确定是否发生错误(根据所调用的特定函数的语义)。该错误将被保证包含syscall.Errno

例子:

r1, _, lastErr := GetUserNameEx.Call(
    3, uintptr(unsafe.Pointer(&arr[0])), uintptr(unsafe.Pointer(&size)))

if r1 == 0 {
    fmt.Println("ERROR:", lastErr.Error())
    return
}
// No error, proceed to print/use arr

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在没有JSONP的情况下调用API

来自分类Dev

是否可以在没有订阅密钥的情况下调用Azure API Rest URL?

来自分类Dev

是否可以在没有订阅密钥的情况下调用Azure API Rest URL?

来自分类Dev

如何在不对URL进行硬编码的情况下调用REST API get方法?

来自分类Dev

如何在没有文档的情况下检查 api?

来自分类Dev

如何在没有 win+l 的情况下调用锁屏 Windows

来自分类Dev

BlueMix SingleSignOn,如何在启用了SSO服务的情况下调用BlueMix应用程序的REST API

来自分类Dev

如何在Win32中正确调用HeapSummary API?

来自分类Dev

没有Win32 API的本地帮助内容

来自分类Dev

v8,libuv,nodejs,win32 API-如何调用EnumWindows并具有回调调用javascript函数?

来自分类Dev

如何禁用按钮-Win32 API

来自分类Dev

如何在有条件的情况下使用ConcatMap进行多个API调用

来自分类Dev

如何在不调用 api 的情况下显示数据?

来自分类Dev

GMAIL API:如何在没有原始消息的情况下获得答复

来自分类Dev

如何在没有实现的情况下将枚举公开给公共API?

来自分类Dev

如何在没有超时异常的情况下使用Rubymotion测试api

来自分类Dev

如何在没有for循环的情况下在twilio api中发送批量短信

来自分类Dev

如何在没有重定向的情况下获取LinkedIn API访问令牌

来自分类Dev

如何在没有资源的情况下构建REST API?

来自分类Dev

如何在没有限制费率问题的情况下使用instagram API跟踪用户?

来自分类Dev

如何在没有REST客户端的情况下演示REST API

来自分类Dev

Microsoft Graph API-如何在没有授权码的情况下获取访问令牌?

来自分类Dev

如何在没有HTTP的情况下创建类似REST API的“东西”?

来自分类Dev

如何在没有REST客户端的情况下演示REST API

来自分类Dev

如何在没有超时异常的情况下使用Rubymotion测试api

来自分类Dev

GMAIL API:如何在没有原始消息的情况下获得答复

来自分类Dev

我如何在没有链接的情况下向API发送一些参数?

来自分类Dev

如何在没有模型cancancan的情况下为api资源设置功能

来自分类Dev

PHP-如何在没有API访问令牌的情况下从Instagram获取图像

Related 相关文章

  1. 1

    在没有JSONP的情况下调用API

  2. 2

    是否可以在没有订阅密钥的情况下调用Azure API Rest URL?

  3. 3

    是否可以在没有订阅密钥的情况下调用Azure API Rest URL?

  4. 4

    如何在不对URL进行硬编码的情况下调用REST API get方法?

  5. 5

    如何在没有文档的情况下检查 api?

  6. 6

    如何在没有 win+l 的情况下调用锁屏 Windows

  7. 7

    BlueMix SingleSignOn,如何在启用了SSO服务的情况下调用BlueMix应用程序的REST API

  8. 8

    如何在Win32中正确调用HeapSummary API?

  9. 9

    没有Win32 API的本地帮助内容

  10. 10

    v8,libuv,nodejs,win32 API-如何调用EnumWindows并具有回调调用javascript函数?

  11. 11

    如何禁用按钮-Win32 API

  12. 12

    如何在有条件的情况下使用ConcatMap进行多个API调用

  13. 13

    如何在不调用 api 的情况下显示数据?

  14. 14

    GMAIL API:如何在没有原始消息的情况下获得答复

  15. 15

    如何在没有实现的情况下将枚举公开给公共API?

  16. 16

    如何在没有超时异常的情况下使用Rubymotion测试api

  17. 17

    如何在没有for循环的情况下在twilio api中发送批量短信

  18. 18

    如何在没有重定向的情况下获取LinkedIn API访问令牌

  19. 19

    如何在没有资源的情况下构建REST API?

  20. 20

    如何在没有限制费率问题的情况下使用instagram API跟踪用户?

  21. 21

    如何在没有REST客户端的情况下演示REST API

  22. 22

    Microsoft Graph API-如何在没有授权码的情况下获取访问令牌?

  23. 23

    如何在没有HTTP的情况下创建类似REST API的“东西”?

  24. 24

    如何在没有REST客户端的情况下演示REST API

  25. 25

    如何在没有超时异常的情况下使用Rubymotion测试api

  26. 26

    GMAIL API:如何在没有原始消息的情况下获得答复

  27. 27

    我如何在没有链接的情况下向API发送一些参数?

  28. 28

    如何在没有模型cancancan的情况下为api资源设置功能

  29. 29

    PHP-如何在没有API访问令牌的情况下从Instagram获取图像

热门标签

归档