#cpp #строки #cython
Здравствуйте, я недавно начал использовать cython в своих проектах, и столкнулся
с проблемой приведения типов. Есть функция, которая принимает на вход std::string и
возвращает std::string, но если в python коде изменить эту строку, то получается сегфолт,
непонимаю как с этим справится, объясните пожалуйста, что я делаю не так?
Код Cython:
cdef public string uploadfile(string fileid, string username):
return ("test_str" + str(username))
Код C++:
#include
#include
#include
#include
#include
using namespace std;
int main(int argc, char **argv)
{
void *handle;
string (*func_0)(string);
char *error;
string parameter;
string parameter_1;
handle = dlopen("/home/ks/storage/modules/webui/webui.so", RTLD_LAZY);
if (!handle) {
fprintf(stderr, "%s\n", dlerror());
exit(EXIT_FAILURE);
}
dlerror();
string (*func_1)(string, string);
*(void **) (&func_1) = dlsym(handle, "uploadfile");
if ((error = dlerror()) != NULL) {
fprintf(stderr, "%s\n", error);
exit(EXIT_FAILURE);
}
cout << "Enter parameter \" fileid\": ";
cin >> parameter;
cout << "Enter parameter \" username\": ";
cin >> parameter_1;
(*func_1)(parameter, parameter_1);
cout << "called func_1" << endl;
cout << (*func_1)(parameter, parameter_1) << endl;
dlclose(handle);
exit(EXIT_SUCCESS);
}
Опять же, если создать переменную типа string, то её никак не могу инициализировать.
Этот код работает:
cdef public string uploadfile(string fileid, string username):
cdef string s
return s
если сделать вот так, то сегфолится:
cdef public string uploadfile(string fileid, string username):
cdef string s = "text"
return s
Проблема решена, если кто-то подскажет решение лучше - буду рад:
cdef public string uploadfile(string fileid, string username):
cdef char *c_str_0 = "Simple string from python \nfile = "
cdef string simple_string = c_str_0
simple_string += fileid
return simple_string
Ответы
Ответ 1
cdef public string uploadfile(string fileid, string username): cdef char *c_str_0 ="Simple string from python \nfile = " cdef string simple_string = c_str_0 simple_string += fileid return simple_string
Комментариев нет:
Отправить комментарий