1

PythonスクリプトをスクリプトにリンクしようとしていC++ます。私はこれを見つけて動作します。

foo.cpp

#include <iostream>

class Foo{
    public:
        void bar(){
            std::cout << "Test!" << std::endl;
        }
};

extern "C" {
    Foo* Foo_new(){ return new Foo(); }
    void Foo_bar(Foo* foo){ foo->bar(); }
}

fooWrapper.py

from ctypes import cdll
lib = cdll.LoadLibrary('./libfoo.so')

class Foo(object):
    def __init__(self):
        self.obj = lib.Foo_new()

    def bar(self):
        lib.Foo_bar(self.obj)


f = Foo()
f.bar()

コンパイルするには、次を使用します。

g++ -c -fPIC foo.cpp -o foo.o
g++ -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o

-sonameうまくいかない場合は、次を使用します-install_name

g++ -c -fPIC foo.cpp -o foo.o
g++ -shared -Wl,-install_name,libfoo.so -o libfoo.so foo.o

そして、ただ実行するには:
python fooWrapper.py

これは機能し、「テスト!」と表示されます。bar()関数の。問題は、関数から関数に
いくつかのパラメーターを送信したいのですが、試したことが機能しません。PythonC++

これは私の試みです:

foo.cpp

#include <iostream>

class Foo{
    public:
        void bar(int number){
            printf("Number is: %d", number);
            std::cout << "Test!" << std::endl;
        }
};

extern "C" {
    Foo* Foo_new(){ return new Foo(); }
    void Foo_bar(Foo* foo){ foo->bar(int number); }
}

fooWrapper.py

from ctypes import cdll
lib = cdll.LoadLibrary('./libfoo.so')

class Foo(object):
    def __init__(self):
        self.obj = lib.Foo_new()

    def bar(self):
        lib.Foo_bar(self.obj)

num = 5    
f = Foo()
f.bar(num)

このエラーが発生します。関数をコンパイルしようとしていC++ます:

foo.cpp: In function ‘void Foo_bar(Foo*)’:
foo.cpp:13: error: expected primary-expression before ‘int’

私が間違っていることは何ですか?前もって感謝します。

4

1 に答える 1