Полностью автоматическая библиотека

Автор kornei, 16.08.12, 17:17:37

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Судя по рисунку, не все ещё знают, что если файл разрезан на несколько частей, об этом свидетельствует окончание файла Part1, Part2 и т.д., то скачивать нужно все части, поэтому выложу прямую ссылку на видео, тем кому это интересно и кто ещё не знает, в какой момент времени происходит обращение Компаса к функции LibInterfaceNotifyEntry.

kornei

К сожалению не помог разбор примера №12(((

У меня получается, что LibInterfaceNotifyEntry выполняется до того, как в окне Компаса открывается документ. А мне нужно, чтобы библиотека ожидала открытия окна документа, выполняла экспорт, закрывала документ и ждала следующего документа

Можно ли это выполнить?

Естественно, LibInterfaceNotifyEntry выполняется до того, как в окне Компаса открывается документ, Вам она нужна для запуска Вашей библиотеки в фоновом режиме и подписки на события приложения KompasObjectNotify, далее в обработчике события koOpenDocumen которое возникнет, когда документ будет открыт, пишете то, что Вы хотите с этим документом сделать.

kornei

function LibInterfaceNotifyEntry( app : PIDispatch ) : boolean; stdcall;

  begin

    if ( iKompasObject = nil ) and  ( app <> nil ) then               
      iKompasObject := KompasObject( app );


    if iKompasObject <> nil then
      begin
        Application.Handle := iKompasObject.ksGetHWindow;
        aplEvent := ApplicationEvent.Create( Addr(iKompasObject) );       
        aplEvent.Advise;                             

    end;

    Result := false;

  end;


Таким образом, я подписываюсь на события приложения? А вот как перейти к обработчику koOpenDocumen ?


kornei

Спасибо за помощь. Все получилось. Все работает почти как надо.

Только одно маленькое неприятное "но".

При работе программы мне не нужно накапливать открытые вкладки, соответственно в обработчике OpenDocument я закрываю документ после завершения экспорта.

  //Результат работы функции
  Result := true;
  //Закроем окно документа
  Doc.ksCloseDocument;
end;


Ошибка на картинке возникает только при отладке. При рабочем запуске библиотеки никаких проблем не замечаю

В чем может быть проблема?

#26
Проблема в этой функции procedure DLLEntryPoint(Reason:Integer); в примере она MyDLLProc.
Ошибка возникает и при рабочем запуске, откройте диспетчер задач и Вы её увидите, Компас сильно рано убивает процесс.
P.S. А зачем Вы закрываете документ после экспорта? Человек работает открыл документ и хочет чего нибудь начертить, а Вы закрыли, Ваша задача была получить, то, что нужно было Вам, а как закрыть, пусть болит голова у того, кто его открыл.

kornei

Файлы будет открывать не человек, а другая программа)))) И файлов может быть весьма много. Что само собой пагубно скажется на производительности.

Хотя это надо будет протестировать.

Еще раз Спасибо за помощь)))