1

私はOCamlで非常に単純にコーディングUbuntuしました:ml.ml

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

そして単純なc.cC:

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

ocamlc -o mlexe.exe ml.ml次に、 andでコンパイルしましたgcc -o cexe.exe c.cmlexe.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 コードから別の言語で自分でコンパイルした実行可能ファイルを呼び出すことです。

誰が何が悪いのか教えてもらえますか?

4

1 に答える 1

0

コメントであなたの答えをありがとう。したがって、問題は、Windowsで呼び出されるUbuntuでコンパイルされた実行可能ファイルがあることのようです。Windows実行可能ファイルとLinux実行可能ファイルは異なり、他の代わりに使用することはできません。

この問題の最も簡単な解決策は、Windowsにコンパイラをインストールし、それを使用してコードをコンパイルして、Windowsバイナリを取得することです。OCamlについては、たとえばhttp://protz.github.com/ocaml-installer/を参照してください。

もう1つの方法は、クロスコンパイルすることです。つまり、Linuxでコンパイルしますが、明示的にコンパイラーにWindows実行可能ファイルを生成するように要求します。これは難しいです。

于 2012-07-26T10:22:18.790 に答える