Python 将 ref int 作为参数传递
Python pass ref int as parameter
我的 python 项目中的 tlb 库通过 win32com.client
。我已经轻松地使用了许多内置函数,但其中一个主要函数获取参数列表,其中两个被标记为 ref int
。当我尝试将 python 整数传递给函数时出现 pywintypes.com_error: (-2147352571, 'Type mismatch.', None, 5)
错误,这显然是因为传递给对象的一些错误参数。
这是我的 python 代码:
import sldworksPython as solidWorks
import sldconstPython as solidConst
import win32com.client
swApp: solidWorks.ISldWorks = win32com.client.Dispatch(solidWorks.SldWorks.CLSID)
swConst = solidConst.constants
fileName = "Assem Of Hinge.SLDASM"
docType = int(swConst.swDocASSEMBLY)
config = int(swConst.swOpenDocOptions_AutoMissingConfig)
error = int(swConst.swFileNotFoundError)
warning = int(swConst.swFileLoadWarning_AlreadyOpen)
print(type(error))
swApp.OpenDoc6(
fileName,
docType,
config,
error,
warning
)
这里是 openDoc6 函数:
ModelDoc2 OpenDoc6(string FileName, int Type, int Options, string Configuration, ref int Errors, ref int Warnings);
这个错误把我吓坏了我真的不想在这个项目中使用 C#。感谢您的帮助
感谢@BoarGules,我刚刚下载了一个名为 pySW 的 SW 库。我想知道这些函数在那里是如何工作的,所以我刚刚检查了它们并了解了我应该如何传递一个整数作为对 C# 函数的引用。
我在下面添加我的解决方案:
import sldconstPython as solidConst
import win32com.client
import pythoncom
import pySW
swApp: solidWorks.ISldWorks = win32com.client.Dispatch(solidWorks.SldWorks.CLSID)
swConst = solidConst.constants
fileName = "Assem Of Hinge.SLDASM"
docType = swConst.swDocASSEMBLY
docOpts = swConst.swOpenDocOptions_AutoMissingConfig
error = win32com.client.VARIANT(pythoncom.VT_BYREF | pythoncom.VT_I4, swConst.swFileNotFoundError)
warning = win32com.client.VARIANT(pythoncom.VT_BYREF | pythoncom.VT_I4, swConst.swFileLoadWarning_AlreadyOpen)
swApp.OpenDoc6(fileName, docType, docOpts, "", error, warning)
这很奇怪,因为 VScode 没有向我建议任何 pythoncom
常量。无论如何,希望这对遇到此类问题的人有所帮助。
我的 python 项目中的 tlb 库通过 win32com.client
。我已经轻松地使用了许多内置函数,但其中一个主要函数获取参数列表,其中两个被标记为 ref int
。当我尝试将 python 整数传递给函数时出现 pywintypes.com_error: (-2147352571, 'Type mismatch.', None, 5)
错误,这显然是因为传递给对象的一些错误参数。
这是我的 python 代码:
import sldworksPython as solidWorks
import sldconstPython as solidConst
import win32com.client
swApp: solidWorks.ISldWorks = win32com.client.Dispatch(solidWorks.SldWorks.CLSID)
swConst = solidConst.constants
fileName = "Assem Of Hinge.SLDASM"
docType = int(swConst.swDocASSEMBLY)
config = int(swConst.swOpenDocOptions_AutoMissingConfig)
error = int(swConst.swFileNotFoundError)
warning = int(swConst.swFileLoadWarning_AlreadyOpen)
print(type(error))
swApp.OpenDoc6(
fileName,
docType,
config,
error,
warning
)
这里是 openDoc6 函数:
ModelDoc2 OpenDoc6(string FileName, int Type, int Options, string Configuration, ref int Errors, ref int Warnings);
这个错误把我吓坏了我真的不想在这个项目中使用 C#。感谢您的帮助
感谢@BoarGules,我刚刚下载了一个名为 pySW 的 SW 库。我想知道这些函数在那里是如何工作的,所以我刚刚检查了它们并了解了我应该如何传递一个整数作为对 C# 函数的引用。
我在下面添加我的解决方案:
import sldconstPython as solidConst
import win32com.client
import pythoncom
import pySW
swApp: solidWorks.ISldWorks = win32com.client.Dispatch(solidWorks.SldWorks.CLSID)
swConst = solidConst.constants
fileName = "Assem Of Hinge.SLDASM"
docType = swConst.swDocASSEMBLY
docOpts = swConst.swOpenDocOptions_AutoMissingConfig
error = win32com.client.VARIANT(pythoncom.VT_BYREF | pythoncom.VT_I4, swConst.swFileNotFoundError)
warning = win32com.client.VARIANT(pythoncom.VT_BYREF | pythoncom.VT_I4, swConst.swFileLoadWarning_AlreadyOpen)
swApp.OpenDoc6(fileName, docType, docOpts, "", error, warning)
这很奇怪,因为 VScode 没有向我建议任何 pythoncom
常量。无论如何,希望这对遇到此类问题的人有所帮助。