2016-10-05 6 views
0

У меня есть следующий код VB:setParameter для свойства массива с Джейкобом

Set QuoteRequest = Quotes.Add 
With QuoteRequest 
    .No = 1 
    .QuoteCode(0)="101" 
    .Code(0)="NAME1" 
    .Code(1)="NAME2" 
End With 

я использую JACOB для доступа к этому COM-объект.

quoteRequest.setProperty("No",1); 
quoteRequest.setProperty("QuoteCode(0)","101"); 
quoteRequest.setProperty("Code(0)", "NAME1"); 
quoteRequest.setProperty("Code(1)", "NAME2"); 

Но это приводит к исключению

com.jacob.com.ComFailException: Can't map to dispid: QuoteCode(0) 

Как я могу передать эту собственность?

ответ

1
import com.jacob.com.*; 
import com.jacob.activeX.*; 

static void setProperty(Dispatch d, String sName, String sIndex, String sValue) { 
    Variant av[] = { new Variant(sIndex), new Variant(sValue) }; 
    Dispatch.invokev(d, sName, Dispatch.Put, av, NO_INT_ARGS).safeRelease(); 
    av[0].safeRelease(); av[1].safeRelease(); 
    } 

Это код, который я использовал. Работает для меня, однако я делал некоторые изменения в Jacob, чтобы заставить мусор из неиспользованных вариантов. Трудно сказать, что я точно сделал, это было лет назад :)

+0

NO_INT_ARGS - что это за параметр? –

+0

У меня возникло исключение 'com.jacob.com.ComFailException: Type mismatch' при запуске этого ... –

+0

' NO_INT_ARGS': UTSL. Тип несоответствия: мой код для случаев, где свойство индексируется по строке. Вы должны немного изменить его. Вам нужно 'int iIndex' вместо' String sIndex'. – Jarekczek