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

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

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

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

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

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

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

Ошибка kAPI2D5.dll

Автор Nyc2008, 27.09.14, 13:22:15

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

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

Nyc2008

При запуске проекта появляется ошибка с текстом - Запуск программы невозможен, так как на компьютере отсутствует kAPI2D5.dll. Попробуйте переустановить программу.
В чем может быть проблема. Компас установлен и работает. Другие проекты запускаются.


Nyc2008

Да проект exe. Пробую использовать API7.


Nyc2008

Попробывал. Ошибка осталась.
Дело в том, что не срабатывает даже точка останова на первой процедуре. При этом компиляция проходит без ошибок.

Уважаемый, я не телепат без кода ответы давать, но я думаю у Вас подключен unit Libtool, удалите его.
+ Благодарностей: 1

Nyc2008

После удаления unit Libtool ошибки нет. Спасибо.
+ Благодарностей: 1

Meldok

Чтобы не создавать новой темы, может кто то здесь сможет помочь. Проблема аналогичная, пишем екзешник на делфи, при запуске программы возникает та же ошибка с kapi2d5.dll. При удалении библиотеки libtool из директивы uses возникает ошибка "Undeclared identifier: ksTransferInterface" в строке fd:=IUnknown(ksTransferInterface(LtDefine.PIUnknown(ld.Plane),ksAPI3DCom,o3d_face)) as IFaceDefinition; Если копировать файл dll вручную в папку с проектом, то ошибок не возникает, но конструкция
IUnknown(ksTransferInterface... всегда возвращает nil.

Насчет кода

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ksConstTLB, KsTLB, StdCtrls, comobj, LtDefine, LDefin2D, ksAuto,
  ks3DCOM_TLB, LDefin3D, LTool3D, ksApi7;

var
  KompasApi7:IApplication;
  kompas: KompasObject;
  Document3D: ksDocument3D;
  Part: ksPart;
  kDoc : IKompasDocument3D;
  part7 : IPart7;

procedure TForm_main.open_kompas_document(Sender: TObject);
var
  disp : IDispatch;
  mes : WideString;
begin
  Kompas := Kompasobject(CreateOleObject('Kompas.Application.5'));
  kompas.Visible:=true;
  KompasApi7:=GetActiveOleObject('Kompas.Application.7') as IApplication;
  kDoc:=KompasApi7.Documents.Open(edit1.text,true,false) As IKompasDocument3D;
  part7 := kDoc.TopPart;
end;

procedure TForm_main.get_dimension_info(Sender: TObject);
var
dt:IDimensionText;
vd:iVertexDefinition;
mo:IModelObject;
x1,y1,z1:double;
doc3D: IDocument3D;

begin
  str:=tstringlist.Create;
  sc:=Part7 as ISymbols3DContainer;
  i:=0;

  doc3D:=IUnknown(ksTransferInterface(LtDefine.PIUnknown(kdoc),ksAPI3DCom,0)) As IDocument3D;
  if doc3D<>nil then
    begin
    showmessage('1');
    end;
  for i:=0 to sc.LineDimensions3D.Count-1 do
    begin
    dt:=sc.LineDimensions3D.LineDimension3D as IDimensionText;
    ld:=sc.LineDimensions3D.LineDimension3D as ILineDimension3D;
    mo:=sc.LineDimensions3D.LineDimension3D.Object1;
    vd:=IUnknown(ksTransferInterface(LtDefine.PIUnknown(mo),ksAPI3DCom,o3d_vertex)) as iVertexDefinition;
    if vd<>nil then
      begin
      vd.GetPoint(x1,y1,z1);
      showmessage(floattostr(x1)+' '+floattostr(y1)+' '+floattostr(z1)+' ');
      end;
   end;
end;

#8
Прикрепите архив проекта к сообщению.

Meldok

Заранее извиняюсь за качество кода, мы пока просто пытаемся разобраться с апи компаса.

oit

У KompasObject есть метод TransferInterface попробуйте через него.

Если Вы пытаетесь разобраться с API, то пишите dll и разбирайтесь, меньше проблем будет, зачем Вам exe-ник?

Meldok

Насчет exe-шника, dll мы никогда раньше не писали, так что решили exe-шник будет проще написать + как вариант возможного использования exe-шника это указание в программе чертежа/массива чертежей, выцепление оттуда информации о размерах, гранях и тд, и передача в отдельный расчетный модуль, по сути без запуска самого компаса.
Но если говорите что с dll меньше проблем, тогда наверно попробуем сделать так.

Компас в любом случае будет запускаться, а передать в отдельный расчётный модуль можно и из Dll.

psiv

#14
Цитата: Sabahs от 28.03.17, 13:37:29Если Вы пытаетесь разобраться с API, то пишите dll и разбирайтесь, меньше проблем будет, зачем Вам exe-ник?
Мне нравится написание приложения в виде ехе-шника тем, что можно быстро запускать его из среды разработки на выполнение для проверки. Есть ли такой же быстрый способ проверки кода будущей библиотеки без подключения ее в Компас и последующего отключения?