【问题标题】:Python ctypes access violationPython ctypes访问冲突
【发布时间】:2012-05-02 01:31:07
【问题描述】:

我正在尝试从 python 访问 dll,遵循 this guide。我尝试从 dll 调用的第一个函数似乎工作正常,所以我必须大部分都在那里,但第二个函数给了我访问冲突。

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 )

当我调用零(句柄)时发生访问冲突。

执行此操作的 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 只是一个 typedef'd int

有什么想法吗?我认为不对返回的值做任何事情是可以的。

【问题讨论】:

  • 你不应该在任何地方写“SOLVED”;这就是公认的答案。如果你已经解决了,那就自己写解决方案。
  • 找一个不同的例子。这一定是我见过的使用 ctypes 的最令人困惑的方式。试试stackoverflow.com/a/4353259/235698
  • @AlexanderR 我无法将我自己的解决方案标记为正确 2 天,我不想浪费别人的时间让他们阅读整个问题只是意识到这没有必要。我现在已经删除了。

标签: python ctypes


【解决方案1】:

问题解决了。

c++ 代码是一些文档提供的示例代码。不用说示例代码和文档不正确(零函数仍然希望其参数作为指针)。

【讨论】:

  • 如果您要帮助其他人回答问题,您可能想提及为什么他们不正确。
猜你喜欢
  • 1970-01-01
  • 2012-01-05
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多