cython: vista de memoria de ndarray de cadenas (o indexación directa de ndarray)

¿Cómo se especifica una vista de memoria de un ndarray que contiene cadenas?

char[:], char*[:], ... No funcionan.

Para ilustrar, mi problema es la definición de funciónabc(...):

cdef void abc(char[:] in_buffer):
    cdef char * element
    element = address(in_buffer[1])
    ...

def main():
    cdef Py_ssize_t i, n = 100

    a = np.array(['ABC', 'D', 'EFGHI'])
    for i in range(n):
        abc(a)

Si una vista de memoria no es posible, ¿puedo implementar el acceso directo a la matriz yo mismo? Necesito evitar el GIL para la funciónabc(...).

Editar 1: En respuesta a la respuesta de Bi Rico.

Mi objetivo es liberar el GIL para la funciónabc(...) y dentro de él procesan los elementos de cadena dendarray in_buffer con c funciones de cadena. Es decir. algo como lo siguiente:

cdef void abc(char[:, ::1] in_buffer) nogil:
    cdef int max_elt_length = in_buffer.shape[1]+1
    cdef char element[max_elt_length+1]
    cdef int length

    for i in range(in_buffer.shape[0]+1):  # is this equivalent to in_buffer.dtype.itemsize + 1 ?
       element[max_elt_length] = 0   # add null-terminator for full-size elements
       memcpy(element, address(buffer[i, 0]), max_length)
       length = strlen(element)
       ...

Respuestas a la pregunta(1)

Su respuesta a la pregunta