Ctypes和指向字符串数组的指针

时间:2014-03-22 19:30:03

标签: ocaml

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

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

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

1 个答案:

答案 0 :(得分:6)

这应该成为诀窍:

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的Array模块进行处理,因为Ctypes会覆盖它,这将在0.3中更改,请参阅this report