Как передать аргумент типа BarTender.Messages - PullRequest
1 голос
/ 21 октября 2019

Я пытаюсь интегрировать приложение Java с интерфейсом Bartender Seagull ActiveX, используя библиотеку jacob 1.19. У меня проблема с print методом, потому что я не знаю, как вызвать этот метод из jacob. Я пробовал следующий код:

public void print( String printJobName, Boolean waitForSpoolJobToComplete, Integer timeoutMs )
    {    
     Variant args[] = new Variant[ 4 ];
     args[ 0 ] = new Variant( printJobName );
     args[ 1 ] = new Variant( waitForSpoolJobToComplete );
     args[ 2 ] = new Variant( timeoutMs );
     args[ 3 ] = new Variant();
     args[ 3 ].putNoParam();
     Variant ret = format.invoke( "Print", args );
}

, где форматом является экземпляр .com.jacob.activeX.ActiveXComponent, и я получаю исключение:

Обнаружено исключение COM: при вызовеиз: Печать Описание: 80020005 / Несоответствие типов.

Я думаю, что аргумент Messages вызывает это исключение. Как передать этот аргумент?

1 Ответ

1 голос
/ 24 октября 2019

Не уверен на 100% в коде, так как я не пробовал следующий код. Если произойдет какая-либо ошибка Java, исправьте меня.

Прочитал несколько раз в Help Seagull :

1. Объявите переменные BarTender

ActiveXComponent btApp = new ActiveXComponent( "BarTender.Application" );

2. Подготовьте функцию Format.Print

//Format.Print: Returns an object of btPrnRslt
public boolean print( String printJobName, Boolean waitForSpoolJobToComplete, Integer timeoutMs, Variant btMsgCol )
{    
    Variant args[] = new Variant[ 4 ];
    args[ 0 ] = new Variant( printJobName );
    args[ 1 ] = new Variant( waitForSpoolJobToComplete );
    args[ 2 ] = new Variant( timeoutMs );
    args[ 3 ] = new Variant( btMsgCol ); 

    Variant result = format.invoke( "Print", args );

    //if (btPrnRslt <> btPrnRsltSuccess)
    //    return false;
    //else
    //    return true;
}

3. Тестовый прогон

if (myFormat.print(firstJob, true, timeOutMS, btMsgCol))
    //Do something if success
else
    //Do something not success
...