11
Jan
January 11, 2013 分类: ASM/C/C++     作者: hoverlees     留言: 发表

Go语言十分简单,跨平台,非常适用于网络应用的开发,本人相当看好。不过很多时候,还是需要扩展Go让Go实现更多的功能,如操作底层硬件、创建窗口等,这个要求可以通过调用C的方式实现。

本文以windows下的Go开发为例,linux完全一样。当然,Windows上首先要安装MinGW.

http://www.hoverlees.com/blog/?p=1465

先做一个GO显示一个对话框窗口的简单示例。在go目录src/pkg下新建一个文件夹名为hover,新建一个hover.go文件,内容如下

package hover
//#include <windows.h>
import "C"
func Msgbox(title string,body string) int{
	C.MessageBox(nil,(*C.CHAR)(C.CString(body)),(*C.CHAR)(C.CString
(title)),0);
	return 0;
}

与其说这是一个go源码文件,还不如把它理解成C语言的模板文件,cgo编译时,会把这个文件的内容转换成C程序并使用gcc编译,所以本人强列推荐将这个程序当成C程序阅读。程序中第二行的注释会在转换成C语言时做为C的代码。Msgbox会调用Windows系统函数MessageBox,并传入对应参数。由于go的数据类型与C语言的数据类型在内存中的表示不同,所以需要转换。Go与C的数据类型对有对应的转换方式,具体可以参看文档。因为MessageBox的第二第三个参数是LPSTR(unsigned char*),所以在调用时需要将Go的string转换成LPSTR类型。

接下来编译和安装函数包:

go build hover
go install hover

编译完成后,可以在程序中import这个hover库。下面写一个简单的程序调用刚刚写好的函数

package main
import "hover"
func main(){
	hover.Msgbox("title","body");
}

最终生成的程序会弹出一个对话框,标题和内容都按程序指定的显示。


查看详细内容 »

标签: ,
快速链接
推荐标签
最新图片
较新文章
随机推荐
友情链接