JS 中指针的用法

来源:互联网 发布:数据库原理中的设计题 编辑:程序博客网 时间:2024/05/21 06:16

在JS调用很少有调用指针的地方,但是当直接调用DLL库时,需要用到相关指针。

有char* , void* ,int* struct * 函数指针,指针的指针….等。

1. char *
如下为char * 类型,没有实际的内存地址。就等价于char *.

var m_char = ref.refType('char');

如下为实际的char *地址,先申请内存,然后进行取地址操作。

var m_data = ref.alloc('char');
var m_charPtr = m_data.ref();

2. void *
如下为void* 类型,没有实际的内存地址。就等价于void*.

var m_char = ref.refType('void');

如下为实际的void *地址,先申请内存,然后进行取地址操作。

var m_data = ref.alloc('void');
var m_voidPtr = m_data.ref();

3. int *

int 指针和char 的用法一致。

4. struct *

结构体指针为对结构体的引用。

定义结构体需要先引用ref-Struct模块。

var Struct = require("ref-Struct);

先声明结构体

var m_Struct = Struct({ 'arg1':'int', 'arg2':'int' });

定义一个结构体变量,赋值

var m_StructValue = new m_Struct();
m_StructValue.arg1 = 1;
m_StructValue.arg2 = 2;

取地址

var m_StructPtr = m_StructValue.ref();

5. 函数指针
在JS 中,其实函数名就是一个函数指针。可以直接拿来用。

例如我声明一个回调函数

var dll = require("ffi");
var callBack = dll.callback('bool',['pointer','int','int'],Fun_callback);

其中Fun_callback为函数指针。
可以如下方式来实现

function Fun_callback() { console.log("this is callback!"); }

6. 指针的指针

指针的指针是一个比较绕口的东西。
可以这样理解: 指针1 指向 地址1 , 指针2 指向地址2 ,而地址2的值就是指针1。 那么指针2就是一个指针的指针,也可以称之为二维指针。

先声明一个void *指针

var m_Hand = ref.alloc('void');
var HAND= m_Hand.ref();

再取指针的地址

var ptr = HAND.ref();

以上均为个人见解,如果建议,请留言,谢谢。

转载请注明出处

原创粉丝点击