How can I call a c++ function using python?

I want to know if there’s a way to use a c++ function inside a python code

For example, after doing my research I did find this solution using .dll file. But It can’t find the function My code:

fun.cpp:

    #include <iostream>
    extern int add(int a, int b) {
    return a+b;
    }
    int main()
    {
        std::cout << "Hello World! from C++" << std::endl;
        return 0;
    }

compiling it using cmd:

> g++ fun.cpp -o fun.dll

Calling the function using Python, ctypes:

    from ctypes import *
    import os
    mydll = cdll.LoadLibrary("C:/Users/User/Desktop/ctypes/fun.dll")

    result= mydll.add(10,1)
    print("Addition value:-"+result)

But I had this error:

Traceback (most recent call last): File “c:\Users\User.vscode\extensions\ms-python.python-2019.10.41019\pythonFiles\ptvsd_launcher.py”, line 43, in main(ptvsdArgs) File “c:\Users\User.vscode\extensions\ms-python.python-2019.10.41019\pythonFiles\lib\python\old_ptvsd\ptvsd__main__.py”, line 432, in main run() File “c:\Users\User.vscode\extensions\ms-python.python-2019.10.41019\pythonFiles\lib\python\old_ptvsd\ptvsd__main__.py”, line 316, in run_file runpy.run_path(target, run_name=’ main ') File “C:\Python36\lib\runpy.py”, line 263, in run_path pkg_name=pkg_name, script_name=fname) File “C:\Python36\lib\runpy.py”, line 96, in run_module_code mod_name, mod_spec, pkg_name, script_name) File “C:\Python36\lib\runpy.py”, line 85, in run_code exec(code, run_globals) File “c:\Users\User\Desktop\ctypes\test.py”, line 5, in result= mydll.add(10,1) File "C:\Python36\lib\ctypes__init.py", line 361, in getattr func = self. getitem (name) File “C:\Python36\lib\ctypes__init__.py”, line 366, in getitem func = self._FuncPtr((name_or_ordinal, self)) AttributeError: function ‘add’ not found

Have you looked at the boostpython - https://www.boost.org/doc/libs/1_63_0/libs/python/doc/html/tutorial/index.html
The above link provide an example for a simple ‘hello world’ implementation

2 Likes

Thank you for your suggest.
I did use ctypes instead:
Here is my solution:

I figure it out thank you so much
Solution:
fun.cpp:

[#ifdef](https://www.facebook.com/hashtag/ifdef?hc_location=ufi) _WIN32
# define API __declspec(dllexport)
[#else](https://www.facebook.com/hashtag/else?hc_location=ufi)
# define API
[#endif](https://www.facebook.com/hashtag/endif?hc_location=ufi)

extern "C" API int add(int a, int b) {
return a+b;
}

Python:

from ctypes import *

dll = CDLL('fun')
result = dll.add(10,1)
print('Addition value:',result)

Output:

Addition value: 11

1 Like