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

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

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

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

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

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

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

Проблемы с запуском простого приложения

Автор MrBarry, 31.08.23, 09:27:44

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

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

MrBarry

Решил начать изучение API Kompas под С++, но столкнулся с кучей проблем при запуске даже простейшего приложения. Я не могу даже запустить прогу, которая просто открывала бы сам Компас (буквально 5 строк). В попытках решить проблему был перелопачен весь этот форум, я выполнил всю инструкцию от самого Компаса (SDK/Компиляция библиотек.doc), подключил все существующие заголовочные файлы от vcl.h до Ks_TLB.cpp.
    Среди примеров в папке Компаса SDK/Samples под С++ есть прога ksContrl, которая делает по сути то же, что делаю я, разве что с графическим интерфейсом. Я пробовал даже скопировать весь код (включая все #include и #pragma), однако разницы 0. И когда ошибки закончились, возникла интересная проблема. Метод kompas.CreateInstance() не создает инстанс компаса, объект остаётся NULL, а значит компас не открывается и в нём ничего не работает. При этом в том же ksControl аналогичный код отлично работает, объект не NULL, компас запущен. Может быть такое, что я пропустил где-то в самом начале подключения всех библиотек какой-то шаг (что-то не подключил, где-то галочку не тыкнул), и из-за этого ничего не работает?

Среда С++ Builder 11, изначально следовал урокам Норсеева на известном сайте. Полный код ниже:

#include <stdio.h>
#include <string>
#include <windows.h>

#include <vcl.h>
#pragma hdrstop
#include <utilcls.h>
#include <systobj.h>

#include "Ks_TLB.h"
#include "Ks_TLB.cpp"
#include "ksConstants.h"
#include "ldefin3d.h"
#include "ldefin2d.h"

#pragma comment(lib, "kAPI5BC")
#pragma comment(lib, "kAPI2D5bc")
#pragma comment(lib, "kAPI3D5bc")


int launchKompas () {
    KompasObjectPtr kompas;
    // Открываем компас
    kompas.CreateInstance(L"KOMPAS.Application.5");

    // Проверяем, открылся ли компас (нет)
    if (kompas) {
        // Создать деталь (до этого ещё не доходило ни разу)
        ksDocument3DPtr Document3D;
        Document3D = (ksDocument3DPtr)kompas->Document3D();
        Document3D->Create(false, TRUE);

        kompas->Visible = true;
    }
    else {
         printf("Error! No Kompas!");
        return 0;
    }
    kompas.Unbind();
    return 1;
}


int main() {
    int res = launchKompas();
    system("pause");
    return 0;
}

Scull_

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

MrBarry

При запуске моего приложения возникают только ошибки на стадии компиляции, до компаса дело не доходит. А когда открываю сам компас, там появляется предупреждение что "только для ознакомления", и аж 7 ошибок "невозможно подключить приложение в ознакомительном режиме". Причём 7 при каждом запуске, даже если я свою прогу не запускал перед этим.
Но тому же ksContrl это не мешало запуску - он спокойно открывает компас, создает или открывает документ, может сохранить его и закрыть компас
Да, у меня Компас 64 bit ознакомительная версия
А ещё Когда я только начинал писать прогу, мне Dr.Web писал:
"Dr.Web заблокировал изменение файлов пользователя процессу C:\Program Files (x86)\Embarcadero\Studio\22.0\bin64\cquery.exe"
Могло ли это быть источником ошибки?

Scull_

Вообще Компас должно подключить Ваше приложение.

Doom

Думаю что начало ошибки идет отсюда:

kompas.CreateInstance(L"KOMPAS.Application.5");
без этой записи не как ?

Scull_

Если эта строчка не работает, то нужно говорить.
Я, выше объяснил.

MrBarry

Цитата: Doom от 31.08.23, 14:18:36Думаю что начало ошибки идет отсюда:

kompas.CreateInstance(L"KOMPAS.Application.5");
без этой записи не как ?

Ну это строчка, которая должна подключать к компасу, без неё никак) Если смотреть в дебаггере, то тогда да, как раз оттуда идут проблемы, ибо она должна инициализировать объект KompasObjectPtr kompas.

Цитата: Scull_ от 31.08.23, 14:03:23Вообще Компас должно подключить Ваше приложение.
Да, я тоже думаю что на самом деле не в компасе проблема, он подключает. Проблема должна быть в моей проге - то ли что-то не подключено, то ли настройка проекта неправильная выставлена. Но какая, я вообще понятия не имею, к сожалению

Scull_

То есть, Ваша программа подключает Компас?

lavgirb

Цитата: MrBarry от 31.08.23, 13:53:22...А когда открываю сам компас, там ... аж 7 ошибок "невозможно подключить приложение в ознакомительном режиме". Причём 7 при каждом запуске, даже если я свою прогу не запускал перед этим...
Попробуйте при запущенном КОМПАС зайти в Приложения-Конфигуратор... и отключить все автозапуски.
Может быть в этом причина появления сообщений.

MrBarry

Цитата: Scull_ от 31.08.23, 14:54:51То есть, Ваша программа подключает Компас?

Суть кода в том, что она подключается к компасу, открывает его и создаёт документ детали.
А проблема в том, что таки не подключается. Объект KompasObjectPtr kompas не инициализируется после метода CreateInstance и остаётся NULL, а вследствие и ничего дальше не работает.

Doom

Цитата: MrBarry от 31.08.23, 14:42:52Ну это строчка, которая должна подключать к компасу, без неё никак)

Это не единственный способ.

У вас наверно стоит windows 10 и выше ?
У них брандмауэр не дает этим путем создавать экземпляр программы.

MrBarry

Цитата: lavgirb от 31.08.23, 14:59:00Попробуйте при запущенном КОМПАС зайти в Приложения-Конфигуратор... и отключить все автозапуски.
Может быть в этом причина появления сообщений.
Действительно, сообщения перестали появляться, ещё и компас стал быстрее открываться. Приятный бонус, однако к основной проблеме отношения не имеющий(
В любом случае спасибо

Цитата: Doom от 31.08.23, 15:06:06Это не единственный способ.

У вас наверно стоит windows 10 и выше ?
У них брандмауэр не дает этим путем создавать экземпляр программы.

Да, у меня Windows 10. Сейчас попробую отключить и протестировать. Правда ещё стоит Dr.Web, а его отключить пока не могу. Надеюсь, он не помешает

Scull_

Вы перегрелись, ребята проблема абсолютно в другом, но Ваши советы в тренде.

MrBarry

Так, отключил брандмауэр и протестировал. Ничего не изменилось.
К тому же вспомнил, что та программа ksContrl как раз таки запускает компас именно этим методом и всё работает.
Насчёт других способов - я пробовал так:
extern "C" IDispatch* far __export WINAPI CreateKompasObject();
...
kompas = IDispatchPtr( CreateKompasObject(), false )
// Такой вариант объявления тоже пробовал:
kompas = (KompasObjectPtr)CreateKompasObject();
Оба варианта объявления не срабатывают, во время исполнения программа выдаёт невнятную ошибку "Ошибка при запуске приложения (0xc000007b)".

Цитата: Scull_ от 31.08.23, 15:19:00Вы перегрелись, ребята проблема абсолютно в другом, но Ваши советы в тренде.
:D Возможно, значит время исследовать тему дальше.

Scull_

Как она выглядит в свободном полете?

MrBarry

Цитата: Scull_ от 31.08.23, 15:27:03Как она выглядит в свободном полете?
Что? Можно поточнее

Doom

Цитата: MrBarry от 31.08.23, 15:23:51Так, отключил брандмауэр и протестировал. Ничего не изменилось.

Он не отключается так просто..

Scull_, вы что sdk не читаете? :) откройте, там есть другие варианты создания экземпляра компаса.

Scull_

Уважаемый, я его читаю, когда сомневаюсь.
Тут, мне все понятно.

Doom

Цитата: Scull_ от 31.08.23, 15:44:03Тут, мне все понятно.

А зачем утверждать что нет другого способа запуска?

Scull_

Способов много, если хотите давайте проработаем, но на Питоне, работать не будет.