aardio 文档

aardio 范例:aardio.Call

//aardio.Call
import golang; 
var go = golang();

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

import "C"  
import "aardio" //源文件: ~\lib\golang\.res\aardio\aardio.go

//export TestCallBack 
func TestCallBack(hwnd uintptr){

    /*
    参数 hwnd 为 aardio 窗口句柄
    "onSendJson" 用于指定 aardio 窗口对象成员函数名
    可指定不定个数调用参数,细节请参考 golang 扩展库中 aardio.Call 函数源码。

    aardio.Call 的原理是发送 _WM_THREAD_CALLBACK 消息给 aardio 窗口,
    然后将参数用 JSON 编码发送给 aardio ,aardio 接收到消息后自 JSON 解析获得参数列表,
    然后自动转换为函数调用,可选返回数值或 null 值。

    这种方法支持跨线程,类似于 RPC 调用(当然速度更快),
    没有跨线程的种种限制(不用理会 Go 的 GMP 调度)。
    */
    aardio.Call(hwnd,"onSendJson","参数1","参数2");
}

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

//上面的 go.main 会自动保存到文件,然后编译 Go 源码生成同名 DLL 文件
go.buildShared("/.go/msgCallback.go");

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

import win.ui;
/*DSG{{*/
var winform = win.form(text="Go 使用 aardio.Call 回调 aardio 窗口函数";right=759;bottom=437)
winform.add(
edit={cls="edit";left=43;top=27;right=717;bottom=400;edge=1;multiline=1;z=1}
)
/*}}*/

winform.onSendJson = function(param1,param2){
    winform.edit.print("Go 调用了 aardio 函数,参数:",param1,param2)
}

//加载 Go 编译的 DLL,注意要指定 cdecl 调用约定
var goDll = raw.loadDll("/.go/msgCallback.dll",,"cdecl");
goDll.TestCallBack( winform.hwnd );

winform.show();
win.loopMessage();

Markdown 格式