Anthony Anthony - 9 months ago 140
Python Question

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 how to pass the pointer to the method:

Is following the right way?

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

or should I be doing:

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

Doing above gives me error:

TypeError: _type_ must have storage info


You should be passing in a string.

For example:


Here's a generalized example with a mock API. In

#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 the shared library using:

clang++ -fPIC -shared -o

Then, in Python:

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