我目前正试图在Go上使用user32.dll EnumWindows,但似乎无法正常工作
params
{"variable"=>
[{"id"=>68,
"ed"=>5213,
"lo_id"=>2192,
"lo_name"=>"Arkan",
"state"=>"created",
"closed_at"=>nil,
"unstarted"=>false,
"crtal"=>0,
"cas_eived"=>0,
"or_payments"=>0,
"cips"=>0,
"g_sles"=>0,
"ters"=>0,
"itews"=>
[{"id"=>615,
"unit_re"=>{"id"=>708, "name"=>"each", "abbreviation"=>"ea", "quantity"=>"1.0", "stock_item_id"=>985, "default_for"=>["base"]},
"pce"=>0,
"nme"=>"1 Yer nant",
"sol]unt"=>0,
"cgory_id"=>nil,
"caty_name"=>"Uncategorized",
"sub_rows"=>nil,
"prev_count"=>0,
"preransfunt"=>0,
"pre_nt"=>0,
"staount"=>0,
"actrt_count"=>0,
"id_evecount"=>0,
"minsfers_out_ount"=>0,
"wasunt"=>0,
"grunt"=>0,
"ennt"=>0,
"ovunt"=>0,
"gont"=>0,
"quane"=>1,
"expunt"=>0,
"goes"=>0,
"staiance"=>0,
"vance"=>0,
"paramsToConvert"=>
["scount",
"pent_transfer_in_count",
"pent_transfer_out_count",
"s_end_count",
"o_count",
"e_count",
"g_count",
"a_start_count",
"m_transfers_in_count",
"m_transfers_out_count",
"g_count",
"w_count",
"s_count"]},
"action"=>"batch_print",
"controller"=>"s",
"event_id"=>"53",
"format"=>"pdf"
}
调用EnumWindows会出现以下错误:
var(
user32 = syscall.NewLazyDLL("user32.dll")
procEnumWindows = user32.NewProc("EnumWindows")
)
func EnumWindows() int {
ret, _, _ := procEnumWindows.Call(
syscall.NewCallback(enumWindowsProc),
uintptr(0),
)
return int(ret)
}
func enumWindowsProc(hwnd syscall.Handle, lparam uintptr) bool {
return true
}
我不知道应该如何使用系统调用包......我似乎无法找到足够的文档
在MSDN文档页面上,它说回调应该返回一个BOOL,那就是我在做什么?
答案 0 :(得分:3)
BOOL
声明为typedef int BOOL
。所以它与Go的bool
不匹配。规格甚至没有提到它的大小。它可能只有1个字节,但它并没有说出来。您应该使用int32
代替。