Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ocaml C字符串数组的类型和指针_Ocaml - Fatal编程技术网

Ocaml C字符串数组的类型和指针

Ocaml C字符串数组的类型和指针,ocaml,Ocaml,我有一个带有以下签名的C函数: void init(int*argc,char**argv[]); 我想使用Ctypes从我的OCaml代码中调用此函数,但我无法找到一种正确的方法将Sys.argv传递给它。这应该可以解决以下问题: module OArray = Array open Ctypes;; open Foreign;; let init = foreign "init" (ptr int @-> ptr string @-> returning void)

我有一个带有以下签名的C函数:

void init(int*argc,char**argv[]);

我想使用Ctypes从我的OCaml代码中调用此函数,但我无法找到一种正确的方法将
Sys.argv
传递给它。

这应该可以解决以下问题:

module OArray = Array

open Ctypes;;
open Foreign;;

let init = 
  foreign "init" (ptr int @-> ptr string @-> returning void)

let init a =
  let argc = allocate int (OArray.length a) in 
  let argv = Array.of_list string (OArray.to_list a) in
  init argc (Array.start argv)

 let () = init Sys.argv

注意,我们需要在OCaml的
数组
模块上保留一个句柄,因为
Ctypes
会覆盖它,这将在0.3中更改。请参见。

谢谢,我对解决方案的简单性感到惊讶!一种策略是编写外部签名,然后让您根据该值的具体ctypes类型进行指导,以了解如何构建需要为其提供的参数。