ESRI AppRef Throws Com 8000FFFF ошибка - PullRequest
0 голосов
/ 25 апреля 2011

Я использую API ArcGIS для создания плагина для arcFM, когда я пытаюсь запустить этот код

 Type t = Type.GetTypeFromProgID("esriFramework.AppRef");
                System.Object obj = Activator.CreateInstance(t);
                pApp = obj as IApplication;

я получаю

System.Runtime.InteropServices.COMException(0x8000FFFF): Creating an instance of the component with CLSID {Appref CLSID HERE} from the IClassFactory faileddue to the following error: 8000ffff

Спасибо

Ответы [ 2 ]

1 голос
/ 03 мая 2011

Это было невозможно, мне нужно было использовать arcMap, а не ArcFM

0 голосов
/ 26 апреля 2011

В документации AppRef CoClass говорится:

Обратите внимание, что вы можете использовать объект AppRef только в том случае, если ваш код выполняется внутри одного из процессов приложения ArcGIS.

Сообщения на форуме, кажется, подтверждают, что это та же самая ошибка, которая появляется при нарушении этого ограничения:

С http://forums.esri.com/Thread.asp?c=93&f=1729&t=217861:

Это мойпонимая, что действительно нет никакого способа получить доступ к экземпляру IApplication из скрипта геообработки.

Теоретически, если ваша задача - чисто геообработка, вы должны иметь возможность делать все это без доступа к объекту IApplication.

Похоже, что ОП вышеупомянутого сообщения на форуме удалось обойти их проблему, "используя IToolboxWorkspace и получая прямой доступ к Esri-toolboxes".Это был ее код:

public IGPTool GetTool(string _sToolName, string _sToolboxName)
{
    IWorkspaceFactory pGPTFact;
    IToolboxWorkspace pToolboxWorkspace;
    IGPToolbox pGPToolbox;
    IGPTool pGPTool;

    pGPTFact = new ToolboxWorkspaceFactoryClass();

    pToolboxWorkspace =  pGPTFact.OpenFromFile(
        ArcGISInstallFolder + @"\ArcToolbox\Toolboxes", 0) as IToolboxWorkspace;
    pGPToolbox = pToolboxWorkspace.OpenToolbox(_sToolboxName); 
    pGPTool = pGPToolbox.OpenTool(_sToolName);
    return pGPTool;
}

private string ArcGISInstallFolder
{
    get
    {
        if (string.IsNullOrEmpty(this.m_sArcGISInstallFolder))
        {
          Microsoft.Win32.RegistryKey regkey;
          regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(
                                                 @"Software\ESRI\ArcGIS", false);
          this.m_sArcGISInstallFolder = regkey.GetValue("InstallDir") as String;
        }
        return this.m_sArcGISInstallFolder;
    }
}

Возможно, вы сможете достичь своей цели либо без объекта AppRef, либо запустив свой скрипт из приложения.

...