在花了很长时间学习python之后,我终于取得了一些突破:
我正在使用以下代码连接到个人通信终端:
from ctypes import *
import sys
PCSHLL32 = windll.PCSHLL32
hllapi = PCSHLL32.hllapi
def connect_pcomm(presentation_space):
function_number = c_int(1)
data_string = c_char_p(presentation_space)
lenght = c_int(4)
ps_position = c_int(0)
hllapi(byref(function_number), data_string, byref(lenght), byref(ps_position))到目前为止一切都很好。它确实可以连接到终端,我可以使用其他功能向屏幕发送按键、断开连接等。
我的问题是函数5,正如IBM文档所定义的那样:
http://publib.boulder.ibm.com/infocenter/pcomhelp/v5r9/index.jsp?topic=/com.ibm.pcomm.doc/books/html/emulator_programming08.htm
‘’复制表示空间功能将主机连接的表示空间的内容复制到您在EHLLAPI应用程序中定义的数据字符串中。‘’
我为此编写的代码(这并不是很特殊):
def copy_presentation_space():
function_number = c_int(5)
data_string = c_char_p("")
lenght = c_int(0)
ps_position = c_int(0)
hllapi(byref(function_number), data_string, byref(lenght), byref(ps_position))主要的问题是data_string变量应该是:“预先分配的目标字符串,主机表示空间的大小。”
因为我不太清楚这意味着什么,所以我只是试着运行代码。然后pythonw.exe崩溃了。史诗般的。终端窗口也崩溃了。它没有给出任何类型的错误,它只是说它停止工作。
现在,我的主要问题是,如何像IBM ref中提到的那样预分配字符串。材料?
我可以简单地在复制屏幕后添加'print data_string‘来查看信息吗?或者我需要使用一些ctype才能查看复制的信息吗?
编辑:我忘了说我不需要使用这个函数,我可以使用这个函数:
将演示空间复制到字符串(8)
我尝试使用它,但data_string变量从不更改值。
EDIT2:根据kwatford的建议,我更改了这行
data_string = c_char_p("")至
data_string = create_string_buffer(8000)现在函数不会崩溃并返回值0,这意味着:‘主机表示空间的内容被复制到应用程序。目标表示空间是活动的,键盘是解锁的。’但是当我尝试打印变量data_string时,我仍然得到一个空的结果。
发布于 2012-08-02 00:48:27
您可以使用ctypes.create_string_buffer创建预分配的字符串缓冲区。
但是,您仍然需要知道缓冲区将有多大。我不熟悉您正在尝试运行的软件,但听起来您需要:
用于这些字符的扩展属性的Unicode characters
因此,粗略估计,字符串应该至少有25*80*2*2 = 8000个字节。
我建议更深入地阅读文档,以便在不起作用时确定正确的值。
https://stackoverflow.com/questions/11763405
复制相似问题