Saturday, 5 March 2016

c# - Referencing ArcMap in class library using ArcObjects?


I have created multiple ESRI addins, where the same code is used. I have created a class library, which I can reference rather than duplicating code. I have the following in my ESRI addin code which works fine



IMxDocument mxdoc = ArcMap.Application.Document as IMxDocument;

However if the same code is used in the class library, I am unable to build the dll. As the class library does not know about ArcMap,


I have tried


ESRI.ArcGIS.ArcMap.Application arcmapApp = new ESRI.ArcGIS.ArcMap.Application();
IMxDocument mxdoc = arcmapApp.Document as IMxDocument;

However when I run the code in my addin (that references my Class Library), i get the following error


enter image description here


What is the correct way of referencing ArcMap in a class library?




Answer



I have got this to work, but not using AppRot (one problem is that there could be multiple instances of ArcMap and ArcCatalog), but to just pass the ArcGIS application object from the addin.


Within Addin


public ESRI.ArcGIS.ArcMap.Application arcmap = ArcMap.Application as ESRI.ArcGIS.ArcMap.Application;

Within class library


    public bool isEditing(ESRI.ArcGIS.ArcMap.Application arcMap)
{
UID editorUID = new UIDClass();
editorUID.Value = "esriEditor.Editor";

IExtension editor = arcMap.FindExtensionByCLSID(editorUID);// (editorUID);// '//as IEditor3;
IEditor e = editor as IEditor;
if (e.EditState == esriEditState.esriStateNotEditing)
{
return false;
}
else
{
return true;
}

}

No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...