Если вы не аннотируете что-либо о функциях в ctypes, предполагается, что они возвращают 32-битные целые числа. В 32-битных процессах эти целые числа и указатели в основном взаимозаменяемы - это не так для 64-битных сборок.
Просто делаю
gp.gp_library_version.restype = ctypes.c_void_p
, прежде чем ваш звонок должен быть достаточным в этом случае (вам все равно понадобится
x = ctypes.c_char_p.from_address(a)
строка).
Проверьте документацию по API, следует ли освободить этот указатель самостоятельно после его использования (возможно, в этом случае да).