public static Address getAddress(DataType dataType, int componentOrdinal, MemBuffer memBuffer) {
		DataTypeComponent comp = getComponent(dataType, componentOrdinal, memBuffer);
		if (comp == null) {
			throw new IllegalArgumentException("Couldn't get component " + componentOrdinal +
				" of " + dataType.getName() + " @ " + memBuffer.getAddress() + ".");
		}
		Address compAddress = getComponentAddress(comp, memBuffer);
		DataType compDt = comp.getDataType();
		int length = comp.getLength();
		DumbMemBufferImpl compMemBuffer = new DumbMemBufferImpl(memBuffer.getMemory(), compAddress);
		Object value = compDt.getValue(compMemBuffer, comp.getDefaultSettings(), length);
		if (value == null) {
			return null;
		}
		if (value instanceof Address) {
			return (Address) value;
		}
		throw new IllegalArgumentException(
			"Component " + componentOrdinal + " of " + dataType.getName() + " is a " +
				compDt.getName() + " data type, which doesn't produce an Address value.");
	}
If the indicated component in the data type exists and is an absolute or relative value that
equates to an address, this returns the address indicated by that component of the data type.
@param dataType the data type whose base type is a structure and whose component's
address value is wanted. (i.e., The component data type referenced by the ordinal value
must be one that returns an Address value; such as a PointerDataType or
ImageBaseOffset32DataType)
@param componentOrdinal 0-based ordinal indicating the component whose address value is being
determined by this method.
@param memBuffer memory buffer that starts where the indicated data type is laid down.
@return the address value held by indicated component in the data type when laid down on
the specified memory or null if component is not used (i.e., value == 0).
Ghidra/Features/MicrosoftCodeAnalyzer/src/main/java/ghidra/app/cmd/data/EHDataTypeUtilities.java