0

我不知道为什么 Ironpython 在执行 DLL 但不是 python 2.7 和 3.3 后崩溃

我的代码如下

import ctypes
import time
DLLHANDLE=ctypes.cdll.LoadLibrary("C:\\INSTRDLL\\builds\\DCSOURCEDLL\\B2902A.dll")
INPUTSCRIPT="SYSTEM{DCSOURCE1|INIT}"
INPUTVOLTAGE=0.0
SOURCEHANDLE=DLLHANDLE.DCSOURCE(c_INPUTSCRIPT,c_INPUTVOLTAGE)
time.sleep(1)

INPUTSCRIPT基本上,一旦发出,DLL 就会调用仪器来执行初始化。

我附上了崩溃截图。请帮忙...

在此处输入图像描述

4

1 回答 1

0

ctypes,一般来说,是一堆与乐趣相反的东西。使用普通的 Python,它就像用 C 编码一样——注意你的指针、数据类型等——但至少 CPython 相对接近于 C 并且可以接受(这也是使用更广泛的优势)。

在 IronPython 中,就是这样,再加上 CLR 必须对所有内容进行中间处理——它使用 .NET 编组 API,并且还在运行时生成 P/Invoke 声明。执行此操作的代码相当复杂并且有已知的错误 - 处理原始内存不是 .NET 的设计目标!

一个值得关注的领域是 IronPython 使用 Unicode 字符串,而您没有指定DCSOURCE函数采用什么类型(宽/Unicode/wchar_t*或窄/ANSI/ char*)。如果不知道 C 函数的签名,就很难说。我也不记得 IronPython ctypes 默认假设和转换成什么。

于 2013-10-30T22:03:38.773 回答