go-ole/go-ole
GitHub: go-ole/go-ole
go-ole 是 Go 语言的 Windows COM/OLE 绑定库,通过共享库而非 cgo 的方式让 Go 程序能够调用 Windows COM 组件和自动化接口。
Stars: 1318 | Forks: 210
# Go OLE
[](https://ci.appveyor.com/project/jacobsantos/go-ole-jgs28)
[](https://travis-ci.org/go-ole/go-ole)
[](https://godoc.org/github.com/go-ole/go-ole)
使用共享库而非 cgo 的 Windows COM 的 Go 绑定。
作者:Yasuhiro Matsumoto。
## 安装
要体验 go-ole,你可以直接编译并运行示例程序:
```
go get github.com/go-ole/go-ole
cd /path/to/go-ole/
go test
cd /path/to/go-ole/example/excel
go run excel.go
```
## 测试
1. 从 https://github.com/go-ole/test-com-server 下载一个发布版本
2. 注册 COM 服务器
- 在 32 位 Windows 上:
`c:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe /codebase /nologo c:\path\to\TestCOMServer.dll`
- 在 64 位 Windows 上:
`c:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe /codebase /nologo c:\path\to\TestCOMServer.dll`
3. `go test`
## 多线程
你有两种解决方案来处理 gothread 和多线程。
1. 你可以将函数或 gothread 锁定到单个线程。
runtime.LockOSThread()
defer runtime.UnlockOSThread()
2. 使用 [scjalliance/comshim](https://github.com/scjalliance/comshim)
任何解决方案的关键在于,你必须为每个 `CoInitialize()` 调用对应的 `CoUninitialize()`。
## 持续集成
已经为 Travis-CI 和 AppVeyor 添加了持续集成配置。你必须将它们添加到你自己的账户分支中才能运行。
**Travis-CI**
添加 Travis-CI 是为了检查 Linux 上的构建,以确保在交叉编译时 `go get` 能够正常工作。目前,Travis-CI 并未用于测试交叉编译,但未来可能会改变这一点。目前也无法在 Linux 上测试该库,因为 COM API 是 Windows 专有的,并且目前无法在 Linux 上运行 COM 服务器,甚至无法连接到远程 COM 服务器。
**AppVeyor**
AppVeyor 用于在 Windows 上使用(开发中的)测试 COM 服务器进行构建。目前它仅用于测试构建并确保代码在 Windows 上正常运行。它将被用于注册 COM 服务器,然后基于该测试 COM 服务器运行测试用例。
测试目前可以运行并且能够通过,这应该在每次提交时都予以保持。
## 版本控制
Go OLE 使用[语义化版本控制](http://semver.org)进行版本编号,这类似于 Go 语言的版本契约。这意味着主版本将始终保持与次版本的向后兼容性。次版本只会添加新的内容和更改。修复将始终在补丁版本中进行。
这个契约应该允许你升级到新的次版本和补丁版本,而不会破坏或修改你现有的代码。如果发生破坏性更改,请提交工单,以便进行修复。
## 许可证
基于 MIT 许可证:http://mattn.mit-license.org/2013
标签:COM/OLE, EVTX分析, Golang, 安全编程, 日志审计, 系统编程, 绑定库, 跨平台调用