mirror of
https://github.com/vlang/v.git
synced 2025-09-10 16:00:31 -04:00
examples: show how to create and pass a V string to a V function, and then get back a V string in Python
This commit is contained in:
parent
193a99d1e7
commit
cc92dbc8a5
@ -1,12 +1,26 @@
|
|||||||
from ctypes import *
|
from ctypes import *
|
||||||
import math, os
|
import math, os
|
||||||
|
|
||||||
|
## Load the V shared library:
|
||||||
so_file="./test.so"
|
so_file="./test.so"
|
||||||
if os.name=="nt":
|
if os.name=="nt":
|
||||||
so_file="./test.dll"
|
so_file="./test.dll"
|
||||||
lib = CDLL(so_file)
|
lib = CDLL(so_file)
|
||||||
|
|
||||||
|
## Pass an integer to a V function, and receiving back an integer:
|
||||||
print("lib.square(10) result is", lib.square(10))
|
print("lib.square(10) result is", lib.square(10))
|
||||||
assert lib.square(10) == 100, "Cannot validate V square()."
|
assert lib.square(10) == 100, "Cannot validate V square()."
|
||||||
|
|
||||||
|
## Pass a floating point number to a V function:
|
||||||
lib.sqrt_of_sum_of_squares.restype = c_double
|
lib.sqrt_of_sum_of_squares.restype = c_double
|
||||||
assert lib.sqrt_of_sum_of_squares(c_double(1.1), c_double(2.2)) == math.sqrt(1.1*1.1 + 2.2*2.2), "Cannot validate V sqrt_of_sum_of_squares()."
|
assert lib.sqrt_of_sum_of_squares(c_double(1.1), c_double(2.2)) == math.sqrt(1.1*1.1 + 2.2*2.2), "Cannot validate V sqrt_of_sum_of_squares()."
|
||||||
|
|
||||||
|
## Passing a V string to a V function, and receiving back a V string:
|
||||||
|
class VString(Structure):
|
||||||
|
_fields_ = [("str", c_char_p), ("len", c_int)]
|
||||||
|
|
||||||
|
lib.process_v_string.argtypes = [VString]
|
||||||
|
lib.process_v_string.restype = VString
|
||||||
|
|
||||||
|
assert lib.process_v_string(VString(b'World', 5)).str == b'v World v'
|
||||||
|
print('Hello', str(lib.process_v_string(VString(b'World', 5)).str, 'utf-8'))
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
module test
|
module test
|
||||||
|
|
||||||
|
// Note: compile this with `v -d no_backtrace -shared test.v`
|
||||||
import math
|
import math
|
||||||
|
|
||||||
@[export: 'square']
|
@[export: 'square']
|
||||||
@ -11,3 +12,9 @@ fn square(i int) int {
|
|||||||
fn sqrt_of_sum_of_squares(x f64, y f64) f64 {
|
fn sqrt_of_sum_of_squares(x f64, y f64) f64 {
|
||||||
return math.sqrt(x * x + y * y)
|
return math.sqrt(x * x + y * y)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// you do not have to use the same name in the export attribute
|
||||||
|
@[export: 'process_v_string']
|
||||||
|
fn work(s string) string {
|
||||||
|
return 'v ${s} v'
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user