从已知类型variab读取数据

2024-09-30 00:34:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用win32com.client从中开发的自定义COM对象读取数据VB.Net版. 你知道吗

通过下面的代码,我可以读取字符串结果

>>> import win32com.client
>>> cstApp = win32com.client.Dispatch("CustomLib.CSTApp")
>>> string = cstApp.GiveMeTestString()
>>> print(type(string))
<class 'str'>
>>> print("Test String: {0}".format(string))
Test String: Well done! I come from COM Object

我现在有了一个方法VB.Net版Dictionary类型,但是当我试图从python脚本读取它时,我得到了一个PyIUknown类型,我无法读取它的值

>>> username = 'artur'
>>> resultset = cstApp.OpenTaskforUser(username)
>>> print(type(resultset))
<class 'PyIUnknown'>
>>> print(resultset)
<PyIUnknown at 0x0000003C47ABAC30 with obj at 0x0000003C47EAFF18>

如何读取数据?你知道吗

否则,我需要使用哪种类型VB.Net版能够从win32com读取包含词典的Python列表吗?你知道吗

谢谢你的帮助。你知道吗


Tags: testcomclient类型stringnettype读取数据
1条回答
网友
1楼 · 发布于 2024-09-30 00:34:06

经过一周的工作,我已经更好地理解了win32com的工作原理和Python对COM接口的支持,所以我想分享一下我用来避免出现这个问题的解决方法。你知道吗

<强>1。首先,PyIUnknown不是一个错误。IUnknown接口是从中派生所有其他接口的根接口。IUnknown(以及PyIUnknown)可以通过QueryInterface方法来使用

<强>2。另一方面,并非所有Python类型都映射到COM接口中。所以IDictionary就是其中之一。这就是为什么我得到PyIUnknown结果。[2]

3岁。在Python中轻松使用COM接口有助于生成映射库中所有可用接口的静态代理类。有不同的方法来做这个活动。在前面的步骤中,我使用了makepy方法。然后我用了EnsureDispatch一个。[3]

最后的解决方法是避免第1点的问题。和2.,是要求定制API COM开发人员将返回的类型从IDictionary更改为JSON字符串。你知道吗

这样我就得到了一个易于使用的Python字典。你知道吗

>>> import win32com.client
>>> import json
>>> cstApp = win32com.client..gencache.EnsureDispatch("CustomLib.CSTApp")
>>> resultset_json = cstApp.OpenTaskforUser('artur')
>>> type(resultset_json)
<class 'str'>
>>> resultset = json.loads(resultset_json)
>>> type(resultset)
<class 'dict'>

我希望这个答案能帮助其他人。你知道吗

相关问题 更多 >

    热门问题