###前提・実現したいこと
ctypes を利用して dll の関数の引数経由で配列のポインタを取得することが目的なのですが、
エラーが発生してしました。
多分カッコの解釈でタプルなのか範囲なのか、はたまたリストにすべき部分で間違えていると思い、
さまざまの解説ページを見ているのですが、いまいち理解できない状況が続いており、
質問することに致しました。
動作するコードを教えていただけると助かります。
またひょっとして、c_int_p が用意されていないということは、
pythonの仕様として
「配列のポインタ」という機能はなくて、
「構造体のポインタ」で行うことが前提だったりしますでしょうか?
###発生している問題・エラーメッセージ
argument 1: <class 'TypeError'>: expected LP_c_long instance instead of _ctypes.PyCPointerType
###該当のソースコード
【python】
from ctypes import *
userdll = windll.LoadLibrary('userdll.dll')
userdll.FunctionTypeB.restype = c_int
userdll.FunctionTypeB.argtypes = [POINTER(c_int), (c_int)]
length = c_int(16)
buffer = c_int * 16
p_buffer = POINTER(buffer)
result = userdll.FunctionTypeB( p_buffer , length) ← ここでエラー
【DLL】
extern "C" __declspec(dllexport) int FunctionTypeB(int* buffer, int length)
{
for (int index = 0; index < length; index++)
{
buffer[index] = index;
}
return 1;
}
###補足情報(言語/FW/ツール等のバージョンなど)
visual studio 2013
python 3.6.0 :: Anaconda cuntum (64-bit)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/30 05:08
2017/03/30 05:16
2017/03/30 05:40