web-dev-qa-db-ja.com

Python 3.5、ctypes:TypeError:strインスタンスの代わりにバイトまたは整数アドレスが必要です

Ctypesに問題があります。私のタイプ変換は正しく、エラーは私には意味がありません。 「arg-ct.c_char_p(logfilepath)」行でエラーが発生しましたTypeError:バイトまたは整数アドレスがstrインスタンスの代わりに必要です

python 3.5と3.4の両方で試しました。

私が呼んでいる関数:

stream_initialize('stream_log.txt')

Stream_initializeコード」

def stream_initialize(logfilepath):
    f = shim.stream_initialize
    arg = ct.c_char_p(logfilepath)
    result = f(arg)

    if result:
        print(find_shim_error(result))
11
toshbar

c_char_pbytesオブジェクトを取得するため、最初にstringbytesに変換する必要があります。

ct.c_char_p(logfilepath.encode('utf-8'))

別の解決策は、c_wchar_pタイプはstringを取ります。

23
user1238367

完全を期すためにstream_initialize(b'stream_log.txt')として呼び出すこともできます。文字列の前のbに注意してください。これにより、文字列はbytesオブジェクトとして解釈されます。

1
GPMueller