AE开发中打开shp经常会用到以下的代码:
IWorkspaceFactory testfactory = new ShapefileWorkspaceFactory();
IWorkspace testwork = testfactory.OpenFromFile(foldername, 0);
之前用的版本vs2015+AE10.2.2一直好好的,换成AE10.4版本之后报错:异常来自HRESULT:0x80040228。
这个错误基本上是axcontrol控件、AE许可方面的问题。看了网上的解决办法,大多数是以下两种方法:
1、界面上添加axcontrol控件(我的已有)
2、program页面里添加:
using ESRI.ArcGIS.esriSystem
IAoInitialize m_aoinitialize = new AoInitializeClass();
m_aoinitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcInfo);
试了之后也是无效的。最终参考了以下两篇文章,验证是有效的。
https://blog.csdn.net/qq_29176825/article/details/84864939
https://www.cnblogs.com/liweis/p/8675903.html
做了修改后的终极方法:在program页面里添加:
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
//以下为新增的代码
IAoInitialize aoInit = new AoInitializeClass();
aoInit.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcServer);
待修改程序的Program.cs文件为如下所示: (其中XXXX与xxxxx分别填程序的命名空间与要启动的窗体名称)
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using ESRI.ArcGIS;
using ESRI.ArcGIS.esriSystem;
namespace XXXX //XXXX为程序的命名空间
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
if (!RuntimeManager.Bind(ProductCode.Engine))
{
if (!RuntimeManager.Bind(ProductCode.Desktop))
{
MessageBox.Show("Unable to bind to ArcGIS runtime. Application will be shut down.");
return;
}
}
IAoInitialize m_aoinitialize = new AoInitializeClass();
m_aoinitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new xxxxx); //xxxxx为你要启动的窗体名称
}
}
}
3、第三种情况:由于AE未破解的缘故,只破解desktop并不行。需将破解文件中的afcore.dll(与desktop等同),将此文件拷贝到engine10.4文件夹下的bin子文件夹,替换原许可文件。这时就可以成功。