• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Не вызываются функции библиотеки.

Автор graphdark, 30.04.22, 13:19:58

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

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

graphdark

Library Wizard сделал шаблон в студии. Прописал свой код. Библиотека подключается, но на вызов функций молчание.
//-------------------------------------------------------------------------------
// Головная функция библиотеки
// ---
void WINAPI LIBRARYENTRY( unsigned int comm )
{
//    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    //GetKompas();
    if (kompas)
       {
        switch (comm)
        {
case 1:
{
GetKompas();
CellChk();
break;
}
case 2: ::ViewName();         break;
           
        }
    }
}

void ViewName()
{
kompas->ksMessage("Here");
ksDocument3DPtr doc3D;
doc3D = kompas->ActiveDocument3D();
if (doc3D)
{
kompas->ksMessage("Here");
}
else
{
kompas->ksMessage("Откройте сборку");
}
}

graphdark

Итак я разобрался. Почему-то после функции GetKompas() kompas был пустой. Починил
kompas.GetActiveObject(L"KOMPAS.Application.5");
Я не думаю, что это верно.

Vi2

Цитата: graphdark от 30.04.22, 15:42:51Итак я разобрался. Почему-то после функции GetKompas() kompas был пустой...
Я не думаю, что это верно.
Так посмотри тело функции. У нас в такой функции стоит загрузка строки из ресурсов. Если нет такой строки там, то ничего и не вызовется.

graphdark

Цитата: Vi2 от 30.04.22, 21:37:42Так посмотри тело функции. У нас в такой функции стоит загрузка строки из ресурсов. Если нет такой строки там, то ничего и не вызовется.
Думал постил тело функции, ошибся.))
void GetKompas()
{
  if ( !(bool)kompas )
  {
    CString filename;
   
    if( ::GetModuleFileName(NULL, filename.GetBuffer(255), 255) )
    {
      filename.ReleaseBuffer( 255 );
      CString libname;
     
      libname = LoadStr( IDR_AUTO_LIB );  //kAPI5.dll
     
      filename.Replace( filename.Right(filename.GetLength() - (filename.ReverseFind('\\') + 1)),
        libname );
     
      HINSTANCE hAppAuto = LoadLibrary( filename ); // идентификатор kAPI5.dll
      if(  hAppAuto ) {
        typedef LPDISPATCH ( WINAPI * FCreateKompasObject )();
        FCreateKompasObject pCreateKompasObject =
          (FCreateKompasObject)GetProcAddress( hAppAuto, "CreateKompasObject" );
        if ( pCreateKompasObject )
          kompas = IDispatchPtr( pCreateKompasObject(), false/*AddRef*/ );
//kompas->ksMessage("here");
 
        FreeLibrary( hAppAuto );
      }
    }
  }
  if (!kompas)
  {
  kompas.GetActiveObject(L"KOMPAS.Application.5");
  }
}
Вот тоже поди загрузка из ресурсов эта LoadLibrary. Эта функция целиком из Wizard. А я раньше отдельные ехе писал, все гораздо проще там.))