2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

眺めて覚えるC言語 その3 PythonからC言語を呼ぶ(引数) c=a+b

2
Last updated at Posted at 2020-01-06

Pythonから整数のa,bを引数としてa+bを返り値として受け取る。

capi.py
import myModule as capi
a,b=10,20
c=capi.Cal(a,b) #c=a+b
print(c)

実行すると

>python capi.py
30
capilib.c
# include <Python.h>
static PyObject* Cal(PyObject* self, PyObject* args){
    int a,b,c;
    if (!PyArg_ParseTuple(args, "ll",&a,&b)){
        return NULL;
    }
    c=a+b;
    return Py_BuildValue("l", c);
}
// Function Definition struct
static PyMethodDef myMethods[] = {
    { "Cal",Cal, METH_VARARGS, "Calc a+b"},
    { NULL }
};
static struct PyModuleDef myModule = {
    PyModuleDef_HEAD_INIT,"myModule","C API Module",-1,myMethods
};
PyMODINIT_FUNC PyInit_myModule(void){
    return PyModule_Create(&myModule);
}

注目ポイントは、

    int a,b,c;
    if (!PyArg_ParseTuple(args, "ll",&a,&b)){
        return NULL;
    }
    c=a+b;
    return Py_BuildValue("l", c);
}
  • "ll"は、二組のintの変数をaとbの変数に入れる。
  • c=a+b 実行した後に"l"整数として返す。
setup.py
from distutils.core import setup, Extension
setup(name = 'myModule', version = '1.0.0',  \
   ext_modules = [Extension('myModule', ['capilib.c'])])

ライブラリの作成

capi>python setup.py install
running install
running build
running build_ext
building 'myModule' extension
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MT -IC:\ProgramData\Anaconda3\include -IC:\ProgramData\Anaconda3\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\cppwinrt" /Tccapilib.c /Fobuild\temp.win-amd64-3.7\Release\capilib.obj
capilib.c
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\bin\HostX86\x64\link.exe /nologo /INCREMENTAL:NO /LTCG /nodefaultlib:libucrt.lib ucrt.lib /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:C:\ProgramData\Anaconda3\libs /LIBPATH:C:\ProgramData\Anaconda3\PCbuild\amd64 "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\lib\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\um\x64" /EXPORT:PyInit_myModule build\temp.win-amd64-3.7\Release\capilib.obj /OUT:build\lib.win-amd64-3.7\myModule.cp37-win_amd64.pyd /IMPLIB:build\temp.win-amd64-3.7\Release\myModule.cp37-win_amd64.lib
   ライブラリ build\temp.win-amd64-3.7\Release\myModule.cp37-win_amd64.lib とオブジェクト build\temp.win-amd64-3.7\Release\myModule.cp37-win_amd64.exp を作成中   
コード生成しています。
コード生成が終了しました。
running install_lib
copying build\lib.win-amd64-3.7\myModule.cp37-win_amd64.pyd -> C:\ProgramData\Anaconda3\Lib\site-packages
running install_egg_info
Removing C:\ProgramData\Anaconda3\Lib\site-packages\myModule-1.0.0-py3.7.egg-info
Writing C:\ProgramData\Anaconda3\Lib\site-packages\myModule-1.0.0-py3.7.egg-info
2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?