AE10 运行时绑定(解决Could not bind to a valid ArcGIS installation)

AE10中一个明显的改变就是运行时绑定,ArcGIS10有一些明显的产品架构上变更。新架构最明显的优势是独立存在的ArcGIS DesktopEngine runtime。你可以将ArcGIS DesktopEngine安装在不同的目录下。你同样可以分别为EngineDesktop打补丁。但是这种构架的变化要求你将你的Engine程序以及自定义组件绑定到你机器上指定的产品。独立应用程序既可绑定到Desktop也可以绑定到Engineruntime。但是,要在程序使用AO之前就做好绑定。

那么,应该如何绑定呢(C#实现)

首先添加引用:

ESRI.ArcGIS.Version

然后

ESRI.ArcGIS.RuntimeManager.Bind(ProductCode.Engine)

那么,绑定就结束了,是不是很简单啊。

其他的一些新增函数

 RuntimeManager.BindLicense()

绑定运行时同时初始化许可

 RuntimeManager.InstalledRuntimes

返回已安装的运行时

RuntimeManager.ActiveRuntime

返回当前已绑定的运行时

RuntimeInfo

获得路径、版本等信息

这些信息在网上很容易找到,那么,如果是用C++该如何实现呢

VARIANT_BOOL InitializeLicense(esriLicenseProductCode product)
{
IAoInitializePtr ipInit(CLSID_AoInitialize);
esriLicenseStatus licenseStatus
= esriLicenseFailure;
ipInit
->IsProductCodeAvailable(product, &licenseStatus);
if (licenseStatus == esriLicenseAvailable)
ipInit
->Initialize(product, &licenseStatus);
return (licenseStatus == esriLicenseCheckedOut);
}

  这是主要的代码,但是仅仅是这样,编译的时候就会出问题,所以在绑定前,还需要LoadVersion,在stdafx.h中添加如下代码

/* Version support */
#import
"libid:6FCCEDE0-179D-4D12-B586-58C88D26CA78" no_namespace raw_interfaces_only no_implementation rename("esriProductCode", "esriVersionProductCode")
#define PRODUCTSTRING(ver) L"" L#ver
#define ESRI_SET_VERSION(prod,vers)
{

HRESULT hr;

VARIANT_BOOL vb;

CComBSTR bsVer(PRODUCTSTRING(vers));

IArcGISVersionPtr ipVersion(__uuidof(VersionManager));

if(!SUCCEEDED(hr = ipVersion->LoadVersion(prod, bsVer, &vb)))

fprintf(stderr,
"LoadVersion() failed with code 0x%.8x\n", hr);
else if(vb != VARIANT_TRUE)
fprintf(stderr,
"LoadVersion() failed\n");
}

  在InitInstance()中最开始,就调用

::CoInitialize(NULL);

ESRI_SET_VERSION(esriArcGISEngine,
10.0)

InitializeLicense(esriLicenseProductCodeEngine);

  至此,已经完成许可初始化与运行时绑定。

参考资料:

http://help.arcgis.com/EN/sdk/10.0/ArcObjects_NET/conceptualhelp/index.html#//000100000nmm000000

http://hi.baidu.com/o%B3%A3%BD%F8/blog/item/eb9e590dc04a7d0a95ca6ba8.html


posted @ 2011-08-29 13:21  junyuz  阅读(2620)  评论(1编辑  收藏  举报