How to pass char pointer to C ++ API from python?

I am trying to call the following C ++ method from my Python code:

TESS_API TessResultRenderer* TESS_CALL TessTextRendererCreate(const char* outputbase)
{
    return new TessTextRenderer(outputbase);
}

I'm having difficulty with passing a pointer to a method:

Is it right?

textRenderer = self.tesseract.TessTextRendererCreate(ctypes.c_char)

or should I do:

outputbase = ctypes.c_char * 512
textRenderer = self.tesseract.TessTextRendererCreate(ctypes.pointer(outputbase))

Doing the above gives me an error:

TypeError: _type_ must have storage info
+4
source share
1 answer

You must pass a string.

For instance:

self.tesseract.TessTextRendererCreate('/path/to/output/file/without/extension')

Here is a generic example with the mock API. In lib.cc:

#include <iostream>

extern "C" {
  const char * foo (const char * input) {
    std::cout <<
      "The function 'foo' was called with the following "
      "input argument: '" << input << "'" << std::endl;

    return input;
  }
}

Compile a shared library using:

clang++ -fPIC -shared lib.cc -o lib.so

Then in Python:

>>> from ctypes import cdll, c_char_p
>>> lib = cdll.LoadLibrary('./lib.so')
>>> lib.foo.restype = c_char_p
>>> result = lib.foo('Hello world!')
The function 'foo' was called with the following input argument: 'Hello world!'
>>> result
'Hello world!'
+3
source

All Articles