go 调用windows dll 的方法 ,代码如下:

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))
} // 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(kernel32)
defer syscall.FreeLibrary(user32) //释放指定的动态链接库 ShowMessage2("windows下的另一种DLL方法调用", "HELLO !") ShowMessage3("windows下的第三种DLL方法调用", "HELLO3 !") //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) time.Sleep(3 * time.Second)
} func init() {
fmt.Print("Starting Up\n")
}

  

go 调用windows dll 的方法的更多相关文章

  1. C#实现动态调用Windows DLL

    调用方法: object obj = WinDllInvoke("Kernel32.dll", "Beep", , }, typeof(void)); 函数代码 ...

  2. go 调用windows dll 的三种方法

    参考:https://blog.csdn.net/qq_39584315/article/details/81287669 大部分代码参考:https://studygolang.com/articl ...

  3. Java Tomcat 中调用.net DLL的方法

    近日一个java的项目,客户要求项目中必须使用其提供的加密机制,扔给了两个.net写的DLL.网络上搜了一圈也没找到啥东西,甚至看到人扬言此事绝无可能.郁闷当中考虑了一个思路.用C#做一个Com,调用 ...

  4. IronPython调用C# DLL函数方法

    C# DLL源码 using System; using System.Collections.Generic; using System.Text; using System.Security.Cr ...

  5. java调用C++ DLL库方法

    最近一个项目要开发网页端人脸识别项目,人脸识别的算法已经写好,是C++版,但是网页端要求使用Java后台,这就涉及到Java调用DLL的问题.经过查找,实现了一个简单的例子. 1.第一步,先在Java ...

  6. 关于C#动态调用VC Dll的方法(转)

    http://blog.csdn.net/null1/article/details/3953155

  7. unity调用c++ dll方法介绍

    摘要 unity用的很普遍,现在很多代码还是用c++写的,需要用unity去调用c++的代码.这里介绍了一种unity调用c++ dll的方法,希望有所帮助. 我采用的软件是Visual Studio ...

  8. 巧用C#做中间语言 实现Java调用.net DLL

    本文将详细为大家介绍一个java调用.net DLL的方法,以实现特殊的客户的特殊要求:“在Java项目中必须使用其提供的用.net写的DLL加密机制!” 环境与工具: ◆.net framework ...

  9. C# 调用外部dll(转)

    C# 调用外部dll   一.      DLL与应用程序 动态链接库(也称为DLL,即为"Dynamic Link Library"的缩写)是Microsoft Windows最 ...

随机推荐

  1. Spring中ClassPathXmlApplication与FileSystemXmlApplicationContext的区别

    Spring中ClassPathXmlApplication与FileSystemXmlApplicationContext的区别 一.概述 在项目中遇到加载不到Spring配置文件,简单分析后,写此 ...

  2. vue--vConsole

    平时在web应用开发过程中,我们可以console.log去输出一些信息,但是在移动端,也就是在手机上,console.log的信息我们是看不到的. 这种情况下,可以选择使用alert弹出一些信息,但 ...

  3. oracle 11 g release 2 安装

    1.下载Oracle 11g R2 for Windows版本 下载地址如下官方网站: http://www.oracle.com/technetwork/database/enterprise-ed ...

  4. Ruby on Rails Tutorial 第一章笔记

    搭建开发环境 作者介绍了 Cloud9\ Coding.net 这样的云端开发环境 安装 Rails 1. 新建 rails 应用 首先,调用 rails new 命令创建一个新的 Rails 应用, ...

  5. 使用Python访问微信

    itchat是一个开源的微信个人号接口,使用它我们可以很方便的访问我们个人微信号里的信息.itchat的github地址如下: https://github.com/littlecodersh/itc ...

  6. Windows Server 2012 R2域控制器部署

    1. 概述 该文档描述了在Windows 2012R2 系统上搭建域控的方式. 2. 具体步骤 2.1 首先我们先配置好IP地址.计算名(默认的计算机名比较长,后期其它计算机加入域控的时候需要输入比较 ...

  7. c# Excel 行高、列宽、合并单元格、单元格边框线、冻结

    http://www.2cto.com/kf/201007/52724.html 新增选择整列: Range = ((Range)(WALeTieSheet.Cells[1, PwCStartCol_ ...

  8. python魔术方法(__init__,__call__,被双下划线包围的方法)

    转载link:http://pycoders-weekly-chinese.readthedocs.io/en/latest/issue6/a-guide-to-pythons-magic-metho ...

  9. Java容器解析系列(0) 开篇

    最近刚好学习完成数据结构与算法相关内容: Data-Structures-and-Algorithm-Analysis 想结合Java中的容器类加深一下理解,因为之前对Java的容器类理解不是很深刻, ...

  10. java 集合之Map

    Map的功能方法 方法put(Object key,Object value)添加一个"值"(想要得东西)和与"值"相关的"键"(key)( ...