Mercurial > pub > dyncall > bindings
view go/godc/README.txt @ 35:75fe1dec0eb4
- added support for signature-based calling convention switch
author | Tassilo Philipp |
---|---|
date | Mon, 13 Apr 2020 16:07:56 +0200 |
parents | 739c40f35a6a |
children | 1e3d929e43be |
line wrap: on
line source
dyncall go bindings Copyright 2014-2016 Tassilo Philipp February 23, 2014 BUILD/INSTALLATION ================== 1) make sure dyncall is built and libraries/headers are in include paths or CGO_CFLAGS points to them, etc. 2) Build this nut with: go build API === Since go is low level, dyncall's public functions are pretty much exposed function by function. Referg to dyncall(3) and godc.go. l := new(ExtLib) err := l.Load(libpath) defer l.Free() err := l.SymsInit(libpath) defer l.SymsCleanup() l.lib // Address lib is loaded at l.FindSymbol(symbolname) l.SymsCount() l.SymsNameFromValue(l.FindSymbol(synbolname)) l.SymsName(index) vm := new(CallVM) err := vm.InitCallVM() defer vm.Free() vm.Mode(DC_CALL_C_DEFAULT) vm.Reset() vm.ArgFloat(36) rf := vm.CallFloat(l.FindSymbol("sqrtf")) vm.Arg.... SIGNATURE FORMAT ================ Signature string is only used by ArgF function, rest uses type info from Go. TYPE CONVERSIONS (and reserved signature char) SIG | FROM GO | C/C++ | TO GO ----+---------------------+--------------------+---------------- 'v' | | void | 'B' | bool | bool | bool 'c' | int8,C.schar | char | int8 'C' | uint8,byte,C.uchar | unsigned char | uint8,byte 's' | int16,C.sshort | short | int16 'S' | uint16,C.ushort | unsigned short | uint16 'i' | int32,C.sint | int | int32 'I' | uint32,C.uint | unsigned int | uint32 'j' | int32,rune,C.slong | long | int32,rune 'J' | uint32,C.ulong | unsigned long | uint32 'l' | int64,C.slonglong | long long | int64 'L' | uint64,C.ulonglong | unsigned long long | uint64 'f' | float32,C.float | float | float32 'd' | float64,C.double | double | float64 'p' | *,[],unsafe.Pointer | void* | unsafe.Pointer 'Z' | string | void* | string TODO ==== - structs - callbacks - callf wrap (argf already there) - update cconv modes, so they are up to date