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/api/projects/status/qr0u2sf7q43us9fj?svg=true)](https://ci.appveyor.com/project/jacobsantos/go-ole-jgs28) [![构建状态](https://travis-ci.org/go-ole/go-ole.svg?branch=master)](https://travis-ci.org/go-ole/go-ole) [![GoDoc](https://godoc.org/github.com/go-ole/go-ole?status.svg)](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, 安全编程, 日志审计, 系统编程, 绑定库, 跨平台调用