Ocaml C字符串数组的类型和指针
我有一个带有以下签名的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)
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类型进行指导,以了解如何构建需要为其提供的参数。