首页 > 系统相关 >golang调用dll,windows

golang调用dll,windows

时间:2023-05-11 22:44:47浏览次数:54  
标签:err windows fmt ret dll golang syscall add Println

使用syscall.LoadLibrary(dllPath)函数加载dll,syscall.Syscall(...)函数调用具体的函数接口

func GoCallDll1(a, b int) uintptr {
	dllFile := syscall.NewLazyDLL(dllFileName)
	fmt.Println("dll:", dllFile.Name)
	add := dllFile.NewProc("add")
	fmt.Println("+++++++NewProc:", add, "+++++++")

	ret, _, err := add.Call(IntPtr(a), IntPtr(b))
	if err != nil && IsFinishError(err) {
		fmt.Println(dllFileName+fmt.Sprintf(":%d+%d", a, b)+"运算结果为:", ret)
	} else {
		fmt.Println(fmt.Sprintf("%+v", err))
	}
	return ret
}

使用syscall.NewLazyDLL()加载dll,使用接口函数.Call(uintptr类型的参数)来调用函数

func GoCallDll2(a, b int) uintptr {
	dllFile, _ := syscall.LoadLibrary(dllFileName)
	fmt.Println("+++++++syscall.LoadLibrary:", dllFile, "+++++++")
	defer syscall.FreeLibrary(dllFile)
	add, err := syscall.GetProcAddress(dllFile, "add")
	fmt.Println("GetProcAddress", add)

	ret, _, err := syscall.Syscall(add,
		2,
		IntPtr(a),
		IntPtr(b),
		0)
	if err != nil && IsFinishError(err) {
		fmt.Println(dllFileName+fmt.Sprintf(":%d+%d", a, b)+"运算结果为:", ret)
	} else {
		fmt.Println(fmt.Sprintf("%+v", err))
	}
	return ret
}

使用syscall.MustLoadDLL(dllPath)加载dll,函数接口函数.Call(参数列表)调用

func GoCallDll3(a, b int) uintptr {
	DllTestDef := syscall.MustLoadDLL(dllFileName)
	add := DllTestDef.MustFindProc("add")

	fmt.Println("+++++++MustFindProc:", add, "+++++++")
	ret, _, err := add.Call(IntPtr(a), IntPtr(b))
	if err != nil && IsFinishError(err) {
		fmt.Println(dllFileName+fmt.Sprintf(":%d+%d", a, b)+"结果为:", ret)
	} else {
		fmt.Println(fmt.Sprintf("%+v", err))
	}
	return ret
}

标签:err,windows,fmt,ret,dll,golang,syscall,add,Println
From: https://www.cnblogs.com/jiftle/p/17392469.html

相关文章

  • Windows 10 22H2 sysprep 无法验证您的windows安装
    系统封装遇到的问题,任何软件也没安装。居然也无法运行分析日志2023-05-1116:04:43,InfoSYSPRP========================================================2023-05-1116:04:43,InfoSYSPRP===Beginningofanewsysprepr......
  • Windows 强制删除文件及文件夹命令
    一、删除文件或目录CMD命令:cmd  #管理员运行MicrosoftWindows[版本10.0.22621.1555](c)MicrosoftCorporation。保留所有权利。C:\Windows\System32>cdd:   #进入d盘D:\C:\Windows\System32>d:D:\>D:\>dir    #查看驱动器D中的卷是新加卷卷的序列......
  • windows docker 存储迁移
    通常在安装的windowsdocker,默认在C:\ProgramFiles\Docker,,镜像增多之后,会发现磁盘不够,别担心,下面来个无脑迁移操作。1:停止Docker服务。你可以在命令提示符(cmd)中输入以下命令  netstopcom.docker.service 2:移动C:\ProgramData\Docker到新的位置。例如,如果你想把......
  • Golang for循环遍历小坑
    一、for循环循环:让程序多次执行相同的代码块for循环是Go语言中唯一一个循环结构for循环经典语法先执行表达式1执行表达式2判断是否成立,如果成立执行循环体循环体执行完成后,执行表达式3再次执行表达式2,判断是否成立.for循环用的最多的地方就是遍历数组或切片等for表达式1......
  • C#windows程序如何静态编译
    先安装Costura.Fody1、项目–>管理Nuget程序包–>“浏览”搜索“Costura.Fody”–>选择低版本1.6.1,安装2、重新生成编译,在项目文件的bin–>debug和release文件夹就有静态.exe针对.NetWinForm窗体常常用到打包安装,但如果是只有几M的小程序,编译后生产的除了EXE执行文件以外......
  • Go语言(Golang)数据库编程
    Go数据库编程一、连接数据库准备连接到数据库要想连接到SQL数据库,首先需要加载目标数据库的驱动,驱动里面包含着于该数据库交互的逻辑。sql.Open()数据库驱动的名称数据源名称得到一个指向sql.DB这个struct的指针sql.DB是用来操作数据库的,它代表了0个或者多个......
  • Windows查看任务进程
    windows查看后台执行中的python或bat脚本:wmicprocesswherecaption="test.bat"getprocessid,commandline| findstr /v findstr#win10前的系统可以用一下命令:wmic process get commandline,processid | findstr test.bat | findstr /v findstr<details>......
  • golang在编译测试时使用ldflags动态设置包中变量的值
    Example: mkdir$GOPATH/src/gotest/touchgo_test.go packagegotestimport"testing"vartimestringvarversionstringfuncTestBuild(t*testing.T){t.Log(time)t.Log(version)} ReadMe.txtgotest-ldflags="-X'gotest......
  • Windows查看5432端口被谁占用
    如果使用的是Windows系统,可以使用以下步骤来查看端口5432被哪个程序占用:打开命令提示符窗口(Win+R,输入cmd并按回车键)。在命令提示符窗口中执行以下命令:netstat-ano|findstr:5432这个命令将列出占用端口5432的进程的PID。执行以下命令,其中"process_id"是上一步......
  • WSL2 中访问宿主机 Windows 的代理
    WSL2中访问宿主机Windows的代理-ZingLixBlog sudoaptinstallproxychains4 ......