我不知道为什么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就会调用仪器执行初始化。
我附上了Crash截图。请帮忙......
答案 0 :(得分:0)
ctypes
是一堆乐趣的反面。使用普通的Python,它就像在C中编码一样 - 观察你的指针,数据类型等等 - 但至少CPython与C相对接近并且它可以接受(它还具有更广泛使用的优点)。
在IronPython中,加上CLR必须介入所有内容 - 它使用.NET封送API,并在运行时生成P / Invoke声明。执行此操作的代码相当复杂并且已知错误 - 处理原始内存不是.NET的目的!
值得关注的一个方面是IronPython使用Unicode字符串,而您没有指定DCSOURCE
函数采用的类型(wide / Unicode / wchar_t*
或narrow / ANSI / char*
)。在不知道C函数的签名的情况下,很难说。我也不记得IronPython ctypes假设并默认转换为什么。