aardio 文档

aardio 范例:字符串

//字符串
import golang;
var go = golang();  

go.main = /**********
package main 

import "C" 
import "fmt"   

//export TestString
func TestString(str  string)  {  
    fmt.Printf("Go 直接收到 aardio 字符串: %s!\n",  str) ; 
}

//export TestStringPtr
func TestStringPtr(str *string)  {  
    fmt.Printf("Go 通过 *string 收到 aardio 字符串: %s!\n",  *str) ; 
    *str = "这是新的字符串";
} 

//export TestCCharPtr 
func TestCCharPtr(pStr *C.char) {

    //aardio 字符串指针转换为 Go 字符串
    var str = C.GoString(pStr);

    //Go 包公开的函数首字母必须是大写。
    fmt.Printf("Go 通过 *C.char 收到 aardio 字符串: %s\n", str) 
}

func main() {} 
**********/ 

go.buildShared("/.go/TestString.go");

//------------------下面调用 DLL-----------------------

import console.int; 
var goDll = raw.loadDll("/.go/TestString.dll",,"cdecl");

/*
传一个字符串 + 一个字符串长度,
2 个参数就等价于 Go 中一个 string 类型参数
*/
var str = "2 个参数就等价于 Go 中一个 string 类型参数"
goDll.TestString(str,#str);//不要在 Go 中保存 aardio 传过去的字符串

//创建 Go 字符串结构体
import golang.string;  
var goStr = golang.string("这是 aardio 字符串,UTF-8 编码");

//在 Go 里这个参数应当声明为 *string 指针类型(aardio 结构体总是传址)
goDll.TestStringPtr(goStr);//不要在 Go 中保存 aardio 传过去的字符串

/*
如果 Go 代码里修改了字符串。
那么在调用后应立即转换为 aardio 字符串(因为 Go 会回收内存)。
只要转换一次,golang.string 内部就会重新指向 aardio 分配的内存。
*/
var str = tostring(goStr); 
console.log(goStr,str);

//传 C 指针,这是原始的方法
goDll.TestCCharPtr("这是 aardio 字符串,UTF-8 编码");

Markdown 格式