////////////////////////////////////////////////////////////////////
// test_cpp.hpp
//
#pragma once
#include "_s_func.hxx"
#include "_t_func.hxx"
#include "_tdefine.hxx"
class test_class {
public:
test_class (LPCTSTR n) { name = n ; std::tout<< name + _T("\t***") << std::endl ; }
virtual ~test_class () { std::tout<< name + _T("\t---") << std::endl ; }
public:
tstring name ;
} ;
inline test_class* get_test_class (void)
{
static test_class G_tc("G_test") ;
return &G_tc ;
}
////////////////////////////////////////////////////////////////////
// test_cpp.cpp
//
#include "test_cpp.hpp"
#include <clocale>
#include <iostream>
test_class tc(_T("global")) ;
int _tmain (int argc,TCHAR* argv[])
{
_tsetlocale(LC_ALL,_T("")) ;
test_class tc(_T("local 1")) ;
{
test_class tc(_T("local 2")) ;
std::tout << _T("hello") << std::endl ;
}
{
test_class* gt = ::get_test_class() ;
std::tout << gt->name << std::endl ;
}
return 0 ;
}
////////////////////////////////////////////////////////////////////
Iwao@AS5202T:/volume1/home/Iwao/test/test_py/call_c/call_cpp/test_cpp $ g++ test_cpp.cpp -Wall Iwao@AS5202T:/volume1/home/Iwao/test/test_py/call_c/call_cpp/test_cpp $ ./a.out global *** local 1 *** local 2 *** hello local 2 --- G_test *** G_test local 1 --- G_test --- global --- Iwao@AS5202T:/volume1/home/Iwao/test/test_py/call_c/call_cpp/test_cpp $
////////////////////////////////////////////////////////////////////
// t_cpp.cpp
//
#include <Python.h>
#include "test_cpp.hpp"
#include <clocale>
#include <iostream>
test_class tc(_T("global")) ;
static PyObject* local__ (PyObject* self, PyObject* args)
{
test_class tc(_T("local")) ;
std::tout << tc.name << std::endl ;
return Py_None;
}
static PyObject* global_ (PyObject* self, PyObject* args)
{
test_class* gt = ::get_test_class() ;
std::tout << gt->name << std::endl ;
return Py_None;
}
static PyMethodDef t_cpp_methods[] = {
{ "local__", local__, METH_NOARGS, "local__" },
{ "global_", global_, METH_NOARGS, "global_" },
{ NULL },
} ;
static struct PyModuleDef t_cpp = {
PyModuleDef_HEAD_INIT,
"t_cpp",
"test cpp module",
-1,
t_cpp_methods
} ;
PyMODINIT_FUNC PyInit_t_cpp(void)
{
return PyModule_Create(&t_cpp) ;
}
////////////////////////////////////////////////////////////////////
Iwao@AS5202T:/volume1/home/Iwao/test/test_py/call_c/call_cpp/test_cpp $ g++ t_cpp.cpp -Wall -fPIC -shared -o t_cpp.so -I /volume1/.@plugins/AppCentral/python3/include/python3.7m/ Iwao@AS5202T:/volume1/home/Iwao/test/test_py/call_c/call_cpp/test_cpp $ python3 Python 3.7.0 (default, Aug 23 2018, 17:48:39) [GCC 4.6.4] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import t_cpp global *** >>> dir(t_cpp) ['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'global_', 'local__'] >>> t_cpp.local__() local *** local local --- >>> t_cpp.local__() local *** local local --- >>> t_cpp.global_() G_test *** G_test >>> t_cpp.global_() G_test >>> import t_cpp >>> t_cpp.local__() local *** local local --- >>> t_cpp.global_() G_test >>> exit() G_test --- global --- Iwao@AS5202T:/volume1/home/Iwao/test/test_py/call_c/call_cpp/test_cpp $
0 人中 0 人がこの 投稿 は役に立ったと言っています。
