こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PythonでDLLからの戻り値で文字列の場合を正しく表示させたい

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

投稿日時 - 2010-03-06 23:00:25

QNo.5730894

すぐに回答ほしいです

質問者が選んだベストアンサー

http://www.python.jp/doc/2.5/lib/ctypes-return-types.html
> デフォルトでは、関数は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

投稿日時 - 2010-03-07 00:34:48

ANo.1

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(1)