1

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.mland编译它gcc -o cexe.exe c.c。启动mlexe.execexe.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 代码中调用我自己用另一种语言编译的可执行文件。

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

4

1 回答 1

0

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

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

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

于 2012-07-26T10:22:18.790 回答