2017-01-20 18 views
1

私はここ1週間ほど苦労しています。要するに、私はC++でプログラムを書いて、Pythonとリンクして(FlaskやDjangoを使ってWebアプリケーションを構築したい)Ctypes:C(++)からPythonへの文字列の転送

int、charまたはvoidを返すMy C関数は正常に動作しますが、問題は文字列を返す必要がある場合です。私は多かれ少なかれ問題の原因を理解しています(私のC関数はポインタを返します、私のPython関数は有用なデータとして扱えません)。

ここに私が書いたコード例があります。

extern "C" { 
    int addint(int a) { 
    return a + 1; 
    } 

    const char* hello() { 
    return "hello"; 
    } 
} 

と私のpywrapper.pyファイル内

は、私は次のようしている:

def addint(number): 
    result = lib.addint(c_int(number)) 
    return result 

def saystr(): 
    result = lib.hello() 
    return result 

if __name__ == "__main__": 
    print('addint: ', addint(5)) 
    print('saystr: ', saystr()) 

私の出力は次のとおりです。

addint: 6 
saystr: -354261249 

私のmain.cppにファイルでは、私は次のような機能を持っていますしたがって、最初の関数は正常に動作します。しかし、2番目の関数が「こんにちは」を返すためには何ができますか? ctypes documentation showsとして

答えて

1

は、明示的に戻り値の型を処理するためにどのようにそれを伝える必要があります:

def saystr(): 
    lib.hello.restype = c_char_p # pointer to a string 
    result = lib.hello() 
    return result 

そうでない場合は、デフォルトの戻り値の型がintである(と返されたポインタを整数アドレスに変換されます)。

+0

驚くべきことに、gracias :) – vgratian

関連する問題