Okay, so having read this page (<a href="http://trac.openmicroscopy.org.uk/omero/wiki/OmeroClients?onlycpp" target="_blank">http://trac.openmicroscopy.org.uk/omero/wiki/OmeroClients?onlycpp</a>) about 1000 times, I&#39;m ready to test if I finally understand what&#39;s going on here. I&#39;m just going to start listing points/concepts, so if anyone can just confirm/correct as they see fit, that would be extremely helpful. It could also probably be useful in helping clean up that page since it is rather confusing (to someone who didn&#39;t develop this stuff, anyway).<br>


<br>- ICE provides generic types (primitives, sequences, dictionaries, etc) that serve as the &#39;middle-man&#39; for converting between those types between languages (ie, going from a list in python to a vector in C++, or something like that via the Ice &#39;sequence&#39;). The reason for using ICE is so that people can write client stuff in any of the 4 languages (Python, Java, C++, Matlab) and everything gets converted the same way. All the information about the types provided and what they convert to in each language are found in the slice definitions that can be found here: <a href="https://trac.openmicroscopy.org.uk/omero/browser/trunk/components/blitz/resources/omero" target="_blank">https://trac.openmicroscopy.org.uk/omero/browser/trunk/components/blitz/resources/omero</a><br>


<br>- From the types that ICE provides (primitives, sequences, etc), OME made a bunch of objects, which are the objects that get passed to and from (along with the ICE types) the server from the client. However, once these objects are on the client side (my side) I can cast them back to their native language. For example, if I have a sequence of objects (omero<span>::</span>api<span>::</span>IObjectList), I can cast it back to a vector of those objects in C++ (a vector of IObjects). <br>


<br><b>Question: </b>Where is the master list of objects? Right now, I guess I can just check out Image.h to find out about the Image class, but there must be a list online somewhere?<br><br><b>Question:</b> Is Image a subclass of IObject? Similar to how Map is a subclass of Object in Java (hopefully I&#39;m using my terminology correctly...)<br>


<br>- Every OME object (for example, Image) has a constructor with an &#39;I&#39; added (ImageI(), for example) which returns a pointer (ImagePtr) to that object, all provided by the API library.<br><br>- In addition to objects, OME also made a bunch of methods. If i were to click through each service on
<a href="http://trac.openmicroscopy.org.uk/omero/wiki/OmeroApi" target="_blank">http://trac.openmicroscopy.org.uk/omero/wiki/OmeroApi</a> I would see every
method available to me through the API, and know which category of use it belongs to. <br><br>
<b>Question: </b>If this is not the case, are all the methods defined here (<a href="http://hudson.openmicroscopy.org.uk/job/OMERO/javadoc/" target="_blank">http://hudson.openmicroscopy.org.uk/job/OMERO/javadoc/</a>) under ome.api?<br>

<br>
- I can use normal C++ types in my code, and ICE handles converting it to the &#39;generalized&#39; form when it&#39;s compiled that the (Blitz?) server can understand. The server otherwise doesn&#39;t understand just plain C++ types (especially the ones the other 3 languages don&#39;t share). However, sometimes in my code, like when a method returns an object used by ICE (for example, a omero<span>::</span>api<span>::</span>IObjectList), i need to write that as what is being returned in my code. But, I can immediately cast it to vector if I wanted to. So in my code I can use both the ICE types and c++ types that ICE supports, and everything will be ok.<br>


<br><b>Question: </b>Will everything be ok..?<br><br>- rtypes just give primities in a &#39;wrapper&#39; that allow them to be NULL. kind of like how Integer is a wrapper for an int in Java to provide special benefits.<br>

<br>In summary:<br><br>- ICE makes my basic types (in my incorrect vocabulary, my arrays, maps, ints, floats, etc) (<b>documentation</b>: <a href="https://trac.openmicroscopy.org.uk/omero/browser/trunk/components/blitz/resources/omero">https://trac.openmicroscopy.org.uk/omero/browser/trunk/components/blitz/resources/omero</a>)<br>

- OME made objects that utilize the above ICE basic types (<b>documentation</b>: i have no idea)<br>- OME made methods for the above OME objects and ICE basic types used to communicate to the server. (<b>documentation:</b> maybe at <a href="http://hudson.openmicroscopy.org.uk/job/OMERO/javadoc/">http://hudson.openmicroscopy.org.uk/job/OMERO/javadoc/</a>)<br>

<br>Thanks for the help<br>Nick<br>