再谈ArcGIS10许可初始化

3 篇文章 0 订阅
1 篇文章 0 订阅
 

今天一个朋友问了我一个问题,在arcgis9.3下的这句代码IGxDialog pGxDialog = new GxDialogClass(); 为什么在ArcGIS10下不能运行了。

       从ArcGIS9.3到ArcGIS10.0,产品的各个方面确实发生了不少的变化;但是至于像这种开发接口的变化无外乎下面三种情况:

n  接口名称变化了,或者是被其它接口所取代

n  接口封装所属的arcgis类库发生了变化

n  接口使用环境发生了变化

 

回到我们前面提到的问题,接口IGxDialog,在ArcGIS10的开发帮助中可以查到,接口名称、封装的类库都没有发生变化,那么原因很有可能是发生在接口使用的环境发生变化了。

如下图所示,在ArcGIS10帮助中可以查到接口IGxDialog只能用在ArcGIS Desktop下使用,将程序许可初始化改为Desktop方式就可以正常运行了。

 

后来,把这个信息转告给我那位朋友,本以为可以解决了;但是,许可初始化时新的问题又出来了。

 

我们先来看看一个ArcObject开发初学者在许可初始化上常犯的一个错误。如下图所示,多数初学者都会许可初始化时勾选的选项越多,所拥有的权限越大。但实际情况恰好相反,ArcGIS许可初始化采用的第一项,即有多个选项时取的永远是第一个被勾选的。下图的这种情况,尽管五个选项都被勾选了,但程序中是按照第一个选项”ArcGIS Engine”来初始化的。

 

       再回到前面提到的那个问题,尽管修改了许可初始化代码,但是如果把代码改成下面这样,程序还是不能正常运行也就不足为怪了

    static class Program

    {

        /// <summary>

        /// The main entry point for the application.

        /// </summary>

        [STAThread]

        static void Main()

        {           

            RuntimeManager.Bind(ProductCode.Engine);

            RuntimeManager.Bind(ProductCode.Server);

            RuntimeManager.Bind(ProductCode.EngineOrDesktop);

            RuntimeManager.Bind(ProductCode.Desktop);

           

            Application.EnableVisualStyles();

            Application.SetCompatibleTextRenderingDefault(false);

            Application.Run(new MainForm());

        }

    }

       上面那段代码,许可尽管初始化了四次,由于只有第一次初始化有效,所以程序的运行范围只是Engine这个范围,IGxDialog接口无法使用。

      

       下面我们将这段初始化代码稍作改动进行调试,来验证下前面关于许可初始化的论述是否正确。

 

 

 

通过上面三种情形下对代码调试所得结果,可以验证我们前面关于ArcGIS许可初始化的论述,“初始化多少次不重要,关键看谁排在第一号”.

      

       注:这里我们要强调的是第三种情形的初始化,尽管ProductCode.EngineOrDesktop

中包含了Desktop;但如果程序运行的环境中同时拥有Engine、Desktop许可,那么程序初始化时优先按Engine初始化。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值