学了很久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))
到目前为止一切都很好。它确实连接到终端,我可以使用其他功能将键发送到屏幕、断开连接等。
我的问题在于 IBM 文档定义的函数 5:
''复制表示空间函数将连接主机的表示空间的内容复制到您在 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 var 应该是:“预先分配的目标字符串是主机表示空间的大小。”
由于我并不完全了解这意味着什么,我只是尝试运行代码。并且 pythonw.exe 崩溃了。史诗般的。终端窗口也开始崩溃。它没有给出任何类型的错误,它只是说它停止工作。
现在,我的主要问题是,如何像 IBM ref 中提到的那样预先分配字符串。材料?
我可以在复制屏幕后简单地添加一个“打印数据字符串”以查看信息,还是我需要使用一些 ctypes 才能查看复制的信息?
编辑:我忘了提到我不需要使用那个功能,我可以使用这个:
将表示空间复制到字符串 (8)
我尝试使用它,但 data_string 变量永远不会改变值。
EDIT2:按照 kwatford 的建议,我改变了行
data_string = c_char_p("")
至
data_string = create_string_buffer(8000)
现在该函数不会崩溃并返回值 0,表示:“'主机演示空间内容已复制到应用程序。目标演示空间处于活动状态,并且键盘已解锁。' 但是当我尝试打印变量 data_string 时,我仍然得到一个空的结果。