4

COM オブジェクトをインスタンス化してから、メソッドを呼び出します。

ActiveXComponent comp = new ActiveXComponent("MyDll.MyClass");

String argument1 = "test1";
String argument2 = "test2";

Variant[] arguments = { new Variant(argument1), new Variant(argument2) };

comp.invoke("myMethod", arguments)

MyDll にというメソッドがあると仮定すると、

myMethod(String s1, String s2) 

それは正常に動作します。

では、メソッドがある場合はどうなるでしょうか

myMethod(String s1, ReturnDeletedModeEnum enum)

MyDll で定義された列挙型で?

どうにかして列挙型をメソッドに渡す必要がありますが、アクセスする方法がわかりません。

Enum を ActiveXComponent として取得しようとしましたが、

new ActiveXComponent("MyDll.ReturnDeletedModeEnum");

(驚くべきことではありませんが)うまくいきませんでした:

com.jacob.com.ComFailException: Can't get object clsid from progid

Enum固有のクラスがあるように見えるため、Jacobに関するドキュメントをさらに見つけようとしましたが、それらの使用方法に関する説明は見つかりませんでした。

4

1 に答える 1

0

列挙パラメーターを使用してメソッドを呼び出す必要があるときに、同じ不確実性に遭遇しました。多くのドキュメントを見つけることができませんでした-JACOBまたはその他。

私はthe values ... correspond to internally stored numbersAn enumeration in VBA is always of data type Long.

それと私の特定の Enumerationの MS Documentation で武装して、私はこれを試してみました...

Dispatch.call(oDocuments, "Open", fileIn, ... ,  new Variant(1L));

そしてそれは働いた!

実際の「列挙」データ構造を取得する方法があると確信していますが、これで十分でした。

于 2016-03-11T15:26:25.480 に答える