0

当我尝试运行此代码时,我正在使用 arcGIS api 为 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

谢谢

4

2 回答 2

1

这是不可能的,我需要使用 arcMap 而不是 ArcFM

于 2011-05-02T21:50:23.073 回答
0

AppRef CoClass 文档中,它说:

请注意,如果您的代码在 ArcGIS 应用程序进程之一中运行,则只能使用 AppRef 对象。

论坛帖子似乎确认这是违反此约束时看到的相同错误:

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

据我了解,确实无法从地理处理脚本访问 IApplication 实例。

理论上,如果您的任务是纯粹的地理处理,您应该能够在不访问 IApplication 对象的情况下完成所有任务。

看起来上述论坛帖子的 OP 能够通过“使用 IToolboxWorkspace 并直接访问 Esri 工具箱”来解决他们的问题。这是她的代码:

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 对象的情况下或通过从应用程序内部运行脚本来实现您的目标。

于 2011-04-25T20:28:58.733 回答