Rust與C互動 FFI 中複雜型別的處理

2021-08-11 10:10:55 字數 2105 閱讀 6797

簡單型別,libc都有對應的不再贅述(沒有對應的bool型別),主要是 針對 struct 和 struct 陣列的互動

c型別rust型別

說明struct_name *

*mut struct_name

struct指標的轉換

結構體中的陣列

slice

見具體例子

struct指標 *有兩層意思:

1. 指向乙個struct物件

struct fiparam

;#define libdll extern "c" _declspec(dllexport)

//函式

libdll int fi_create(short nchannelnum, fiparam* pparam);

extern crate libc;

use libc::;

#[repr(c)]

pubstruct fiparam

//函式

#[link(name = "庫檔名(無字尾)")]

extern

呼叫
let

mut param=box::new(fiparam

);let result: i32 = unsafe ;

struct fipoint

;struct fifacepos

;#define libdll extern "c" _declspec(dllexport)

//函式pfps指向的是陣列

libdll int fi_detect_face(short nchannelid, int bpp, int nwidth, int nheight, fifacepos* pfps, int nmaxfacenums, int nsamplesize = 640);

extern crate libc;

use libc::;

use std::mem;

#[repr(c)]

pubstruct fipoint

impl fipoint

}}#[repr(c)]

pubstruct fifacepos

impl fifacepos,//}}

}#[link(name = "庫檔名")]

extern

呼叫
extern crate libc;

use libc::;

use std::mem;

let max_face_num=10;

let mut face_poses = vec::new();

for _ in

0..max_face_num

let face_num: i32 = unsafe ;

extern crate libc;

use libc::c_int;

#[no_mangle]

pubextern

"c"fn

rs_trigger(v1:c_int,v2:c_int) -> c_int

#ifdef _win64

#define __ext __declspec(dllexport)

#elif _win32

#define __ext __declspec(dllexport)

#else

#define __ext extern

#endif

//將dll拷貝到exe相同的目錄

#pragma comment (lib,"**/target/release/lib**.dll.lib")

#ifdef __cplusplus

extern "c"

//c++這個一定要加上

#endif

__ext int add(int v1, int v2);

add(1,2);

待續

只在windows 上進行測試,linux 未知

JS中簡單資料型別與複雜型別

簡單資料型別 null 返回的是乙個空的物件 object var timer null console.log typeof timer 如果有個變數我們以後打算儲存為物件,暫時沒想好放啥,這個時候就給 null 棧 棧的特點是先進後出的 我們可把棧看成乙個桶先進來的壓在桶的最下方 後進來的在桶的...

C 中理解乙個複雜型別變數的真實含義

在c 中有時會遇到定義的比較複雜的變數,比如說指標和引用的符合型別。這時我們可以用從內到外,從左到右的方法去閱讀這個變數的方法搞清它的真實含義。int val1 3 int p1 val1 說明 p1 是乙個指標,p1指向了val1,int說明val1 是int型的 int val2 val1 同理...

在C 環境中與Lua進行互動(二)

在c 環境中與lua進行互動 二 1.lua和 c 中型別的對應 nil null string system.string number system.double boolean system.boolean table luainte ce.luatable function luainte ...