CppHello.cpp// файл реализации класса CppHello.cpp
// подключаем интерфейс класса к файлу его реализации
#include "HHello.h"
#include <string>
using namespace hello;
using namespace std;
CppHello::CppHello() // конструктор класса
{
}
CppHello::~CppHello() // деструктор класса
{
}
void CppHello::setName(char *value) {
name = value;
}
char *CppHello::message() {
greeting = " Hello!!!";
result = strcat(greeting, name); // Сдесь программа вылетает
return result;
}
HHello.h/ заголовочный файл класса HHello.h
// интерфейс класса
namespace hello {
// объявление класса
class CppHello // имя класса
{
public: // спецификатор доступа public
// пример объявления строки
char *name = new char[1000]; // name
char *greeting = new char[1000];
char *result = new char[1000];
CppHello(); // конструктор класса
~CppHello();
void setName(char *name);
char *message(); // функция (метод класса) выводящая сообщение на экран
}; // конец объявления класса CppHello
}
Реализация в Python это всё для создания модуля python из C++hello.pyxcdef extern from "HHello.h" namespace "hello":
cdef cppclass CppHello:
CppHello() except +
void setName(char *) except +
char *message() except +
cdef class PyHello:
cdef CppHello *cpp_hello
def __cinit__(self):
self.cpp_hello = new CppHello()
def __dealloc__(self):
del self.cpp_hello
def setName(self, name):
self.cpp_hello.setName(name.encode())
def message(self):
return "{0}".format(self.cpp_hello.message().decode())
main.py#-------------------------------------------------------------------------------
# Name: main
# Purpose:
#
# Author: ALEX
#
# Created: 06.01.2019
# Copyright: (c) ALEX 2019
# Licence: <your licence>
#-------------------------------------------------------------------------------
from time import sleep
from hello import PyHello
def main():
hello = PyHello()
hello.setName("Александр")
# Программа вылетает здесь и Python не ловит ошибку. Да в try except помещал всё равно падает программа
print(hello.message()) # -->По задумке должно быть так Привет Александр
if __name__ == '__main__':
main()
sleep(3)