我目前正在使用.NET框架为ArcMap 10.4编写插件。我使用的是最新的ArcGIS Runtime SDK for .NET(100.2.1)和10.4 ArcObjects SDK。我正在使用64位操作系统和处理器在Windows Server 2016 Standard Edition(版本1607)虚拟机上进行开发。
我已使用ArcMap加载项向导自动生成具有Polygon类型的构造工具,并在我的Config.esriaddinx中添加了必要的代码以将该工具添加到工具栏。我没有对自动生成的C#代码进行任何更改。
项目设置为通过ArcMap进行调试并附加到流程,由向导自动设置。所有这一切都运行正常:调试器启动,工具栏上有一个按钮,显示Windows窗体,一切正常。当我尝试单击与构造工具对应的工具栏上的按钮时出现问题:
单击此按钮会调用构造工具的自动生成的OnActivate()方法:
protected override void OnActivate()
{
m_edSketch = m_editor as IEditSketch3;
// Activate a shape constructor based on the current sketch geometry
if (m_edSketch.GeometryType == esriGeometryType.esriGeometryPoint | m_edSketch.GeometryType == esriGeometryType.esriGeometryMultipoint)
m_csc = new PointConstructorClass();
else
m_csc = new StraightConstructorClass();
m_csc.Initialize(m_editor);
/* TODO: This is auto-generated code... Why does this throw an exception??? */
m_edSketch.ShapeConstructor = m_csc;
m_csc.Activate();
// Setup events
m_editEvents.OnSketchModified += OnSketchModified;
m_editEvents5.OnShapeConstructorChanged += OnShapeConstructorChanged;
m_editEvents.OnSketchFinished += OnSketchFinished;
}
这是抛出异常的方法。在
行m_edSketch.ShapeConstructor = m_csc;
抛出以下异常:
Error HRESULT E_FAIL has been returned from a call to a COM component.
Error Code: -2147467259
Trace:
at
ESRI.ArcGIS.Editor.IEditSketch3.set_ShapeConstructor(IShapeConstructor ShapeConstructor)
at AddIn.ConstructionTool.OnActivate() in
C:\...\ConstructionTool.cs:line 50
这个例外真的没什么可说的,特别是因为HRESULT错误代码解析为未指定的失败(0x80004005)。它也被扔到这里感觉特别奇怪,因为这是自动生成的代码,我们所做的就是设置一个值。
知道为什么会抛出这个异常吗?这可能是ArcGIS Runtime和ArcObjects SDK之间的版本不匹配吗?我的Windows机器中是否有一些.dll缺少ArcObjects SDK预计会在这里?有没有人遇到过类似的问题并找到了解决方法?
注释抛出异常的行允许事情无错误地运行,但该工具不起作用且不绘制任何行。
这里的任何帮助都很有用。
答案 0 :(得分:0)
尝试在项目参考中将embed interop types属性更改为false。 所有esri引用
将该属性设置为true时会引起问题