0

このガイドに従って、python から dll にアクセスしようとしています。最初に試して dll から呼び出した関数は正常に動作しているように見えるので、ほとんど問題なく実行できているはずですが、2 番目の関数でアクセス違反が発生します。

Python コード:

#create open function
openProto = ctypes.WINFUNCTYPE( ctypes.c_int, ctypes.c_void_p )
openParams = ( 1, "handle", 0 ) ,
open = openProto ( ( "SensorOpen", pm ), openParams )

#create zero function
zeroProto = ctypes.WINFUNCTYPE( ctypes.c_int, ctypes.c_int )
zeroParams = ( 1, "handle", 0 ), 
zero = zeroProto ( ( "SensorZero", pm ), zeroParams )

handle = ctypes.c_int ( 0 )
status = ctypes.c_int ( 0 )
open( ctypes.byref(handle) )
print handle
zero( handle )

zero( handle ) を呼び出すと、アクセス違反が発生します。

これを行う C++ コードは次のとおりです。

SENSOR_HANDLE   seHandle;  // Sensor handle
double          power;
char            buff[80];

// Get handle for sensor
SensorOpen (&seHandle);

printf ("Sensor connected\nZeroing, please wait...\n");
while (SensorZero (seHandle) == SENSOR_ZERO_FAILED)
{
    printf ("Zero failed.\nCheck no power is being applied.\nPress return key to retry  ");
    gets (buff);
}

SENSOR_HANDLE はただtypedefint

何か案は?返された値で何もしなくても大丈夫だと思います。

4

1 に答える 1

0

問題が解決しました。

C++ コードは、一部のドキュメントで提供されるサンプル コードです。言うまでもなく、サンプル コードとドキュメントは間違っていました (zero 関数は依然として引数をポインターとして必要としていました)。

于 2012-04-20T13:03:11.403 に答える