ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。

VisualStudio2005でDLLを作成して、Python2.6のctypesモジュールを使って、PythonからC++のルーチンを呼び出す際に、文字列を引数として、文字列を戻り値として使えるようにC++を記述したいのですがどうすればよいのでしょうか?

関数呼び出しは __stdcallです。
__declspec(dllexport) unsigned char* __stdcall Test(const char *s, int n);
とした場合、Pythonで戻り値を見るとint型の数値でした。

from ctypes import *
lib = windll.LoadLibrary("test.dll")
s = lib.Test("abcdefghijk", 3)
print s

A 回答 (1件)

http://www.python.jp/doc/2.5/lib/ctypes-return-t …
> デフォルトでは、関数はC intを返すと仮定されます。他の戻り値の型を指定するには、 関数オブジェクトのrestype属性に設定します。

とあります。
上のチュートリアルでも char *を戻り値に持つstrchrを例にしてますね。

lib.Test.restype= c_char_p
s = lib.Test("abcdefghijk", 3)
print s
ではどうでしょうか。

そのDLLをPythonでしか使用しないのなら、下記のような方法でPythonのモジュールにするのも手です。
http://www.python.jp/doc/nightly/ext/ext.html
http://www.python.jp/doc/nightly/api/api.html
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!