ДА!есть очень умный нативный способ сделать это.
допустим, вы используете Python ctypes.поместите что-то вроде этого в коде C:
1) в коде C:
#define PYEXPORT extern "C" __declspec(dllexport)
теперь поместите PYEXPORT над функцией, которую вы хотите экспортировать:
PYEXPORT
int myfunc(params){
2) После компиляции вернитесь в Python и откройте ваш файл .c и проанализируйте его следующим образом:
source1_ = open(cfile_name + '.c')
source1 = source1_.read()
source1_.close()
fn = source1.split('PYEXPORT')[-1].split('(')[0].split(' ')[1]
ввод оболочки: fn
вывод оболочки: 'myfunc'
3) Теперь умная часть: определите новую функцию в строке:
a1 = """
global get_c_fn
def get_c_fn(dll):
func = dll."""
a2 = """
return func"""
a3 = a1 + fn + a2
print(a3)
global get_c_fn
def get_c_fn(dll):
func = dll.myfunc
return func
СЕЙЧАС выполните exec (a3), и она превратит эту строку в функцию, которую вы можете использовать.
4) выполните обычные действия:
mydll = ctypes.CDLL(cfile_name + '.dll')
c_fn = get_cuda_fn(mydll)
c_fn.argtypes = func_params (an array of C-converted inputs you need)
c_fn( *[params] )
, и там у вас есть оболочка Python для сценария C без необходимости изменять десять разных вещей каждый раз, когда что-то меняется.