校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > Golang如何調用windows下的dll動態庫中的函數

Golang如何調用windows下的dll動態庫中的函數

熱門標簽:百度地圖標注后傳給手機 電話機器人軟件免費 外呼系統用什么卡 壽光微信地圖標注 外呼系統顯本地手機號 評價高的400電話辦理 涿州代理外呼系統 excel地圖標注分布數據 阿克蘇地圖標注

使用syscall調用

package main
import (
    "fmt"
    "syscall"
    "time"
    "unsafe"
)
const (
    MB_OK                = 0x00000000
    MB_OKCANCEL          = 0x00000001
    MB_ABORTRETRYIGNORE  = 0x00000002
    MB_YESNOCANCEL       = 0x00000003
    MB_YESNO             = 0x00000004
    MB_RETRYCANCEL       = 0x00000005
    MB_CANCELTRYCONTINUE = 0x00000006
    MB_ICONHAND          = 0x00000010
    MB_ICONQUESTION      = 0x00000020
    MB_ICONEXCLAMATION   = 0x00000030
    MB_ICONASTERISK      = 0x00000040
    MB_USERICON          = 0x00000080
    MB_ICONWARNING       = MB_ICONEXCLAMATION
    MB_ICONERROR         = MB_ICONHAND
    MB_ICONINFORMATION   = MB_ICONASTERISK
    MB_ICONSTOP          = MB_ICONHAND
    MB_DEFBUTTON1 = 0x00000000
    MB_DEFBUTTON2 = 0x00000100
    MB_DEFBUTTON3 = 0x00000200
    MB_DEFBUTTON4 = 0x00000300
)
func abort(funcname string, err syscall.Errno) {
    panic(funcname + " failed: " + err.Error())
}
var (
    //    kernel32, _        = syscall.LoadLibrary("kernel32.dll")
    //    getModuleHandle, _ = syscall.GetProcAddress(kernel32, "GetModuleHandleW")
    user32, _     = syscall.LoadLibrary("user32.dll")
    messageBox, _ = syscall.GetProcAddress(user32, "MessageBoxW")
)
func IntPtr(n int) uintptr {
    return uintptr(n)
}
func StrPtr(s string) uintptr {
    return uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(s)))
}
func MessageBox(caption, text string, style uintptr) (result int) {
    ret, _, callErr := syscall.Syscall9(messageBox,
        4,
        0,
        StrPtr(text),
        StrPtr(caption),
        style,
        0, 0, 0, 0, 0)
    if callErr != 0 {
        abort("Call MessageBox", callErr)
    }
    result = int(ret)
    return
}
//func GetModuleHandle() (handle uintptr) {
//    if ret, _, callErr := syscall.Syscall(getModuleHandle, 0, 0, 0, 0); callErr != 0 {
//        abort("Call GetModuleHandle", callErr)
//    } else {
//        handle = ret
//    }
//    return
//}
// windows下的第二種DLL方法調用
func ShowMessage2(title, text string) {
    user32 := syscall.NewLazyDLL("user32.dll")
    MessageBoxW := user32.NewProc("MessageBoxW")
    MessageBoxW.Call(IntPtr(0), StrPtr(text), StrPtr(title), IntPtr(0))
}
func main() {
    //    defer syscall.FreeLibrary(kernel32)
    defer syscall.FreeLibrary(user32)
    //fmt.Printf("Retern: %d\n", MessageBox("Done Title", "This test is Done.", MB_YESNOCANCEL))
    num := MessageBox("Done Title", "This test is Done.", MB_YESNOCANCEL)
    fmt.Printf("Get Retrun Value Before MessageBox Invoked: %d\n", num)
    ShowMessage2("windows下的第二種DLL方法調用", "HELLO !")
    time.Sleep(3 * time.Second)
}
func init() {
    fmt.Print("Starting Up\n")
}

補充:go 調用windows dll 的三種方法

第三種方法是從Go\src\internal\syscall\windows\sysdll源碼中找到的,三種方法的具體區別還不是很明晰,

初步判斷:lazy應該是相當于動態庫,其余兩種直接把庫加載到內存。

package main
import(
	"fmt"
	"syscall"
	"time"
    "unsafe"
)
const (
    MB_OK                = 0x00000000
    MB_OKCANCEL          = 0x00000001
    MB_ABORTRETRYIGNORE  = 0x00000002
    MB_YESNOCANCEL       = 0x00000003
    MB_YESNO             = 0x00000004
    MB_RETRYCANCEL       = 0x00000005
    MB_CANCELTRYCONTINUE = 0x00000006
    MB_ICONHAND          = 0x00000010
    MB_ICONQUESTION      = 0x00000020
    MB_ICONEXCLAMATION   = 0x00000030
    MB_ICONASTERISK      = 0x00000040
    MB_USERICON          = 0x00000080
    MB_ICONWARNING       = MB_ICONEXCLAMATION
    MB_ICONERROR         = MB_ICONHAND
    MB_ICONINFORMATION   = MB_ICONASTERISK
    MB_ICONSTOP          = MB_ICONHAND
 
    MB_DEFBUTTON1 = 0x00000000
    MB_DEFBUTTON2 = 0x00000100
    MB_DEFBUTTON3 = 0x00000200
    MB_DEFBUTTON4 = 0x00000300
)
 
func abort(funcname string, err syscall.Errno) {
    panic(funcname + " failed: " + err.Error())
}
 
var (
   
    user32, _     = syscall.LoadLibrary("user32.dll")
    messageBox, _ = syscall.GetProcAddress(user32, "MessageBoxW")
)
 
func IntPtr(n int) uintptr {
    return uintptr(n)
}
 
func StrPtr(s string) uintptr {
    return uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(s)))
}
 
func MessageBox(caption, text string, style uintptr) (result int) {
    ret, _, callErr := syscall.Syscall9(messageBox,
        4,
        0,
        StrPtr(text),
        StrPtr(caption),
        style,
        0, 0, 0, 0, 0)
    if callErr != 0 {
        abort("Call MessageBox", callErr)
    }
    result = int(ret)
    return
}
 
//func GetModuleHandle() (handle uintptr) {
//    if ret, _, callErr := syscall.Syscall(getModuleHandle, 0, 0, 0, 0); callErr != 0 {
//        abort("Call GetModuleHandle", callErr)
//    } else {
//        handle = ret
//    }
//    return
//}
 
// windows下的第二種DLL方法調用
func ShowMessage2(title, text string) {
    user32 := syscall.NewLazyDLL("user32.dll")
    MessageBoxW := user32.NewProc("MessageBoxW")
    MessageBoxW.Call(IntPtr(0), StrPtr(text), StrPtr(title), IntPtr(0))
} 
 
// windows下的第三種DLL方法調用
func ShowMessage3(title, text string) {
    user32,_ := syscall.LoadDLL("user32.dll")
    MessageBoxW,_ := user32.FindProc("MessageBoxW")
    MessageBoxW.Call(IntPtr(0), StrPtr(text), StrPtr(title), IntPtr(0))
}
 
func main() {
    defer syscall.FreeLibrary(user32)
 
    num := MessageBox("Done Title", "This test is Done.", MB_YESNOCANCEL)
    fmt.Printf("Get Retrun Value Before MessageBox Invoked: %d\n", num)
    ShowMessage2("windows下的另一種DLL方法調用", "HELLO !")
	
	ShowMessage3("windows下的第三種DLL方法調用", "lyslyslys !")
 
    time.Sleep(3 * time.Second)
}
 
func init() {
    fmt.Print("Starting Up\n")
}
 
​

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Golang中switch語句和select語句的用法教程
  • Golang 編譯成DLL文件的操作
  • golang調用c實現的dll接口細節分享
  • golang實踐-第三方包為私有庫的配置方案
  • 完美解決golang go get私有倉庫的問題
  • golang gopm get -g -v 無法獲取第三方庫的解決方案
  • Golang: 內建容器的用法
  • golang switch語句的靈活寫法介紹

標簽:欽州 銅川 吐魯番 重慶 梅河口 汕頭 蘭州 雞西

巨人網絡通訊聲明:本文標題《Golang如何調用windows下的dll動態庫中的函數》,本文關鍵詞  Golang,如何,調用,windows,下的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Golang如何調用windows下的dll動態庫中的函數》相關的同類信息!
  • 本頁收集關于Golang如何調用windows下的dll動態庫中的函數的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    日韩视频一区二区| 国产欧美日韩在线| 不卡高清视频专区| 韩国精品免费视频| 美国十次了思思久久精品导航| 亚洲综合偷拍欧美一区色| 日本一区二区免费在线观看视频 | 国产精品初高中害羞小美女文| 精品国产精品一区二区夜夜嗨| 在线观看91av| 日韩一区二区三区四区五区六区| 国产精品一区二区无线| 日本强好片久久久久久aaa| 国产毛片精品视频| 国产九色精品成人porny| 国产精品激情偷乱一区二区∴| 欧美三级蜜桃2在线观看| www.欧美精品一二区| 亚洲欧美成人一区二区三区| 久久久精品人体av艺术| 久久嫩草精品久久久精品一| 久久精品视频网| 国产精品伦理在线| 中文字幕在线观看不卡| 亚洲欧美视频在线观看| 日韩精品亚洲一区| 国产精品1区2区| 91视频在线看| 67194成人在线观看| 91麻豆精品国产| 一本一道综合狠狠老| 欧美日韩一级视频| 欧美一级日韩不卡播放免费| 久久久亚洲精华液精华液精华液| 国产精品网站在线观看| 亚洲一区二区三区四区五区中文| 日韩精品色哟哟| 丁香六月久久综合狠狠色| 色av一区二区| 久久综合久久鬼色中文字| 国产精品丝袜一区| 日韩一区欧美二区| 成人午夜看片网址| 欧美午夜精品理论片a级按摩| 日韩精品自拍偷拍| 亚洲综合另类小说| 成人免费视频免费观看| 这里只有精品免费| 亚洲蜜臀av乱码久久精品| 蜜臀av一区二区在线免费观看 | 久久人人97超碰com| 亚洲私人影院在线观看| 免费成人在线网站| 色综合网色综合| 久久精品一区二区三区av| 亚洲午夜羞羞片| 本田岬高潮一区二区三区| 91精品国产91久久久久久一区二区 | 欧美大度的电影原声| 成人免费在线视频观看| 精品一区二区免费看| 在线观看视频一区二区欧美日韩| 精品电影一区二区| 精品国产第一区二区三区观看体验| 麻豆中文一区二区| 日本二三区不卡| 国产欧美一二三区| 国产美女精品人人做人人爽| 欧美影院午夜播放| 亚洲乱码中文字幕| 成人在线综合网| 久久精品夜夜夜夜久久| 久久草av在线| 精品少妇一区二区| 视频一区国产视频| 欧美日韩精品三区| 亚洲宅男天堂在线观看无病毒| 成人国产免费视频| 欧美国产精品专区| 国产在线精品一区二区| 久久网这里都是精品| 精品一区二区三区久久久| 欧美不卡视频一区| 久久精品99国产精品日本| 国产午夜精品福利| 精品在线免费视频| 欧美一级日韩一级| 久久99国内精品| 精品久久久三级丝袜| 黄网站免费久久| 久久久久99精品一区| 成人丝袜高跟foot| 亚洲欧美福利一区二区| 欧美亚洲高清一区二区三区不卡| 亚洲欧美欧美一区二区三区| 色哟哟国产精品| 亚洲va欧美va人人爽午夜| 在线播放视频一区| 久草精品在线观看| 国产精品每日更新| 欧美午夜电影在线播放| 美女任你摸久久| 欧美经典一区二区| 在线视频欧美精品| 久久国产综合精品| 国产精品女上位| 91麻豆精品国产综合久久久久久| 亚洲午夜精品一区二区三区他趣| 在线不卡a资源高清| 国产精品亚洲视频| 一区二区视频在线看| 6080yy午夜一二三区久久| 国产在线看一区| 国产精品乱码妇女bbbb| 91官网在线观看| 国内久久精品视频| 亚洲精品免费在线观看| 欧美va日韩va| 色视频欧美一区二区三区| 精品一区二区日韩| 一区av在线播放| 久久免费美女视频| 在线免费不卡视频| 国产一区二区精品久久99| 一区二区激情小说| 久久一区二区三区四区| 在线欧美日韩精品| 岛国精品在线播放| 免费观看一级欧美片| 欧美一区二区三区在线看| 三级亚洲高清视频| 专区另类欧美日韩| 久久综合九色欧美综合狠狠| 在线免费一区三区| 波多野结衣在线aⅴ中文字幕不卡| 日韩中文字幕av电影| 中文字幕一区二区三区乱码在线 | 亚洲免费观看高清完整版在线观看| 91精品国产aⅴ一区二区| 97久久超碰国产精品电影| 精品一区二区三区久久久| 亚洲sss视频在线视频| 亚洲日本在线观看| 国产日韩精品一区二区浪潮av| 91麻豆精品国产91久久久使用方法 | 中文字幕不卡的av| 日韩免费电影网站| 欧美一区二区三区在线观看视频| 99视频精品在线| 成人在线综合网站| 国产不卡在线一区| 国产真实乱偷精品视频免| 日韩不卡一二三区| 日韩av一区二区三区四区| 亚洲一区二区视频| 夜夜嗨av一区二区三区中文字幕| 国产精品传媒视频| 亚洲素人一区二区| 亚洲女与黑人做爰| 亚洲美女区一区| 亚洲乱码一区二区三区在线观看| 国产精品网曝门| 国产精品国产馆在线真实露脸 | 国产精品理论在线观看| 久久久99久久精品欧美| 精品国产免费一区二区三区四区| 日韩欧美高清一区| 久久久一区二区三区捆绑**| 国产精品午夜免费| 亚洲视频每日更新| 亚洲久草在线视频| 午夜精品成人在线| 韩国精品主播一区二区在线观看 | 日韩avvvv在线播放| 美女视频黄a大片欧美| 国产九色sp调教91| 成人精品国产福利| 欧美亚洲综合久久| 日韩欧美一级二级三级| 国产精品嫩草影院com| 亚洲麻豆国产自偷在线| 一区二区三区91| 爽好久久久欧美精品| 亚洲美女偷拍久久| 免费在线看成人av| 成人一区二区三区中文字幕| 色综合天天综合在线视频| 91精品国模一区二区三区| 日韩精品影音先锋| 中文字幕视频一区| 日本vs亚洲vs韩国一区三区 | 日本精品视频一区二区| 欧美人xxxx| 亚洲国产精品av| 亚洲成人av中文| 高清成人在线观看| 欧美三级在线视频| 日本一区二区成人| 五月婷婷综合网| 9i在线看片成人免费|