Подключение DLL к ArcGIS 10

0 голосов
спросил 01 Апр, 11 от herokiller9 (200 баллов) в категории Программные продукты Esri
Добрый день!

Возникли проблемы при переносе разработанных библиотек (Extension) под 10 версию ArcGIS. Проблема возникла сразу же при попытке воспользоваться объектными библиотеками 10-тки(olb-файлы). Среда разработки(Delphi) просто не видела их при попытке создать tlb. Был поднят реестр и обнаружено, что при установке ArcGIS'а он регистрирует olb файлы с версией a.0 вместо 10.0... после изменения версии с a.0 на 10.0 список библиотек для создания dll расширился, но добавляться в созданный extension отказался. После переименовании всех веток с a.0 на 10.0 удалось создать минимальный проект с 1 кнопкой. Заработало на машине разработчика, но при попытке подконнектить dll на рядом стоящей машине ARCGIS ругается, завершает свое выполнение с большим гисовским окном и предложением отписаться им в службу поддержки. ESRIRegAsm отрабатывает успешно

Итого вопроса 3:

1. Какого черта он регистрирует файлы olb(esriSystem.olb к примеру) с версией a.0, которая не позволяет использовать библиотеки при работе с ArcObjects?
2. Есть ли у кого-нибудь вообще положительный опыт переноса dll с 9-тки на 10-тку?
3. Реально ли прикрутить библиотеки, написанные под 9-тку к 10-тке? И что для этого нужно?


4 Ответы

0 голосов
ответил 01 Апр, 11 от herokiller9 (200 баллов)
По 3-ему вопросу

Имеется ввиду прикрутить прежние DLL-ки без переписывание всего кода под интерфейсы 10-ой версии))
0 голосов
ответил 04 Апр, 11 от herokiller9 (200 баллов)
Странно, неужели никто не сталкивался с подобными проблемами?

0 голосов
ответил 11 Апр, 11 от Grigoriy (127,020 баллов)

1. Какого черта он регистрирует файлы olb(esriSystem.olb к примеру) с версией a.0, которая не позволяет использовать библиотеки при работе с ArcObjects?
2. Есть ли у кого-нибудь вообще положительный опыт переноса dll с 9-тки на 10-тку?
3. Реально ли прикрутить библиотеки, написанные под 9-тку к 10-тке? И что для этого нужно?


1. Свои объекты разработчик вправе регистрировать так как ему угодно image.
2. Масса таких опытов.
3. Изучить что изменилось в объектах для 10-ки и перекомпилировать приложение.
Примеров полно для .NET, Java и C++.
А вот с Delphi придется разбираться самому.
ESRI не поддерживает официально эту среду разработки.
Есть документы от пользователей, которые работают с Delphi, но они для 9-ой версии:
Programming with ArcObjects 9.3 in Delphi 7, 2005, 2006, 2007, and 2009
По крайней мере сначала надо их почитать.
0 голосов
ответил 14 Авг, 12 от dorofei4 (140 баллов)
 Удалось решить проблему ArcObjects c Delphi .
1.Нужно в реестре сделать копии записей в ветке [HKEY_CLASSES_ROOT\TypeLib\

где название раздела a.0  с именем 10.0 для всех модулей как это написано здесь http://forums.arcgis.com/threads/4100-arcgis-10-and-delphi

2. Создать пакет с помощью утилиты tlibimp.exe как указано здесь http://gis-lab.info/forum/viewtopic.php?t=5183? добавив дополнительно библиотеку ArcGISVersion.dll из ProgramFiles\Common files\Arcgis\bin

3. В проекте перед выполнением кода необходимо выполнить дополнительную процедуру. Ну как то так:
program Project1;

uses
  Forms,
  ArcGISVersionLib_TLB,
  esriSystem_tlb,
  ActiveX,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}



procedure InitApp(app: TApplication );

var
AoInitialize: IAoInitialize;
  status: TOleEnum;
  res: HRESULT;
  bool_res:   WordBool;
  verManager : TVersionManager;
  i_agVersion : IArcGISVersion;

begin

  verManager := TVersionManager.Create(app);
  i_agVersion := verManager.DefaultInterface as IArcGISVersion;
  res := i_agVersion.LoadVersion(ArcGISVersionLib_TLB.esriArcGISEngine,'10.0',bool_res);

  if (res <> S_OK) then
  begin
    Exit;
  end;
  if (not bool_res) then
  begin
    Exit;
  end;

  AoInitialize:=CoAoInitialize.Create as IAoInitialize;
  status := AoInitialize.IsProductCodeAvailable(esriSystem_TLB.esriLicenseProductCodeEngineGeoDB );
  if (status <> esriSystem_TLB.esriLicenseAvailable) then
    begin
       Exit;
    end
  else
    begin
      status := AoInitialize.Initialize(esriSystem_TLB.esriLicenseProductCodeEngine    );
      if (res <> S_OK) then
      begin
        Exit;
      end;
      if (status <> esriSystem_TLB.esriLicenseCheckedOut) then
      begin
        Exit;
      end;
    end;
end;

begin
  Application.Initialize;
  InitApp(Application);
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


 
 
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...