从VBA代码调用OCaml或C的可执行文件

时间:2012-07-25 18:45:33

标签: c vba excel-vba ocaml executable

Ubuntu下,我在OCaml中编写了一个非常简单的ml.ml

let () = print_string "hello world, in OCaml\n"

C中的简单c.c

#include <stdio.h>
main() {
  printf("hello world, in C\n");
  return 0; }

然后我按ocamlc -o mlexe.exe ml.mlgcc -o cexe.exe c.c编译了它。在mlexe.exe的终端下启动cexe.exeUbuntu会返回字符串。

现在我想从VBA代码中调用它。我启动Windows,打开Microsoft Excel文件和VBA编辑器,然后输入:

Sub run()
    Dim ProcID As Integer
    ProcID = Shell("C:\Windows\system32\calc.exe", 1)

    Dim Result As Variant
    Result = Shell("C:\test\cexe.exe",1)
    'Result = Shell("C:\test\mlexe.exe",1)
    'Result = Shell("C:\test\cexe.exe")
    'Result = Shell("C:\test\mlexe.exe")
End Sub

我希望Result获取字符串hello world...(或不太好的情况下的退出代码),运行宏会启动计算器,但会给我一个错误Run-time error '5': Invalid procedure call or argument,对于其他4 Shell我自己的可执行文件。

目的只是调用我自己用VBA代码编写的另一种语言编写的可执行文件。

有谁能告诉我出了什么问题?

1 个答案:

答案 0 :(得分:0)

感谢您在评论中的回答。所以问题似乎是你有一个在Ubuntu下编译的可执行文件,它在Windows下调用。 Windows可执行文件和Linux可执行文件是不同的,不能代替另一个使用。

解决您问题的最简单方法是在Windows下安装编译器,使用它编译代码,从而获得Windows二进制文件。 对于OCaml,请参阅http://protz.github.com/ocaml-installer/

另一种方法是交叉编译,即在Linux下编译,但明确要求编译器生成Windows可执行文件。这更难。