在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.ml
和gcc -o cexe.exe c.c
编译了它。在mlexe.exe
的终端下启动cexe.exe
或Ubuntu
会返回字符串。
现在我想从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代码编写的另一种语言编写的可执行文件。
有谁能告诉我出了什么问题?
答案 0 :(得分:0)
感谢您在评论中的回答。所以问题似乎是你有一个在Ubuntu下编译的可执行文件,它在Windows下调用。 Windows可执行文件和Linux可执行文件是不同的,不能代替另一个使用。
解决您问题的最简单方法是在Windows下安装编译器,使用它编译代码,从而获得Windows二进制文件。 对于OCaml,请参阅http://protz.github.com/ocaml-installer/。
另一种方法是交叉编译,即在Linux下编译,但明确要求编译器生成Windows可执行文件。这更难。