タイプ ライブラリから取得した IDispatch インターフェイスを次に示します。
interface IMYPhoneCmd : IDispatch {
[id(0x00000001), helpstring("method CallSet")]
HRESULT CallSet(
[in] BSTR* name,
[in, optional, defaultvalue(0)] VARIANT par1,
[in, optional, defaultvalue(0)] VARIANT par2,
[in, optional, defaultvalue(0)] VARIANT par3,
[in, optional, defaultvalue(0)] VARIANT par4,
[in, optional, defaultvalue(0)] VARIANT par5,
[in, optional, defaultvalue(0)] VARIANT par6,
[in, optional, defaultvalue(0)] VARIANT par7,
[in, optional, defaultvalue(0)] VARIANT par8,
[in, optional, defaultvalue(0)] VARIANT par9,
[in, optional, defaultvalue(0)] VARIANT par10,
[in, optional, defaultvalue(0)] VARIANT par11,
[in, optional, defaultvalue(0)] VARIANT par12,
[in, optional, defaultvalue(0)] VARIANT par13,
[in, optional, defaultvalue(0)] VARIANT par14,
[in, optional, defaultvalue(0)] VARIANT par15,
[in, optional, defaultvalue(0)] VARIANT par16,
[out, retval] long* retval);
ここに私のJavaコードがあります:
OleAutomation automation = new OleAutomation("PhoneScript.MYPhoneCmd");
int[] ids = automation.getIDsOfNames(new String[] { "CallSet", "name" });
int dispIdMember = ids[0];
int[] rgdispidNamedArgs = new int[] {ids[1]};
Variant[] rgvarg = new Variant[3];
String name = "Call_setCallDistance";
rgvarg[0] = new Variant(name);
rgvarg[1] = new Variant("Newyork");
rgvarg[2] = new Variant("2000");
System.out.println(dispIdMember);
// Call the method
Variant pVarResult = automation.invoke(dispIdMember, rgvarg, rgdispidNamedArgs );
// Check the return value
if (pVarResult == null ){
System.out.println("Failed to call method ");
}
出力は次のとおりです。
1
Failed to call method
name
実行可能ファイルが開きますが、失敗することがわかるように、私が望むことはしませんrgdispidNamedArgs
。
これは実際に動作する Perl の等価物です:
my $Callset = "Call_setCallDistance"; # Callset name
my $param1 = Newyork; # Callset parameter 1
my $param2 = 2000; # Callset parameter 2
Win32::OLE::CreateObject('PhoneScript.MYPhoneCmd', $PhoneClient) || die "can't connnect to PhoneClient: $!\n";
$Result = $PhoneClient->CallSet($Callset, $param1, $param2); # This is the exact line I need in java
私はJavaで初めてOleAutomationを使用していますが、インターネット上でその例を見つけることはほとんどありませんでした.これが唯一の違いのようで、うまくいきません。理由はわかりません。CallSet メソッドは、20-30 などのさまざまな設定/呼び出しに使用されますが、特に"Call_setCallDistance"に関心があります。お手にとって頂けたら嬉しいです!