Maxscript寄存器接口似乎无法正常工作

时间:2014-04-21 21:23:07

标签: python matlab ole maxscript

首先,感谢任何阅读此内容的人,并提供一些帮助/反馈,因为我几天都在努力解决这个问题。我是stackoverflow的新手,并试图在问题中尽可能详细。

我正在尝试在3ds Max上设置OLE服务器。我已按照[此处](http://docs.autodesk.com/3DSMAX/15/ENU/MAXScript-Help/index.html?url=files/GUID-AE4CAED2-1EF9-40EF-9761-83F535FE953A.htm,topicNumber=d30e714562)所述的说明进行操作,包括编辑注册表并公开该功能。

然而,当我尝试从另一个程序调用该函数时(我尝试使用MATLAB和python脚本),我得到一个错误,导致我怀疑registerOLEInterface没有注册该函数。在python中,我使用了与第一个[here](http://tech-artists.org/forum/showthread.php?2723-Python-to-MaxScript-to-Python)非常相似的脚本,并得到如下错误:


`Traceback (most recent call last):
File "start.py", line 8, in <module>
maxCOM ._FlagAsMethod("maxCommand")
File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 437, in _FlagAsMethod
details = build.MapEntry(self.__AttrToID__(name), (name,))
File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 442, in __AttrToID__ 
return self._oleobj_.GetIDsOfNames(0,attr) pywintypes.com_error: (-2147352570, 'Unknown name.', None, None)`

在MATLAB中,h = actxserver('Max.Application.15')工作正常,但是当我尝试使用h.maxCommand访问该函数时,我收到此错误:


`No appropriate method, property, or field maxCommand for class COM.Max_Application_15.`

对于我可能做错了什么,我将不胜感激。我正在使用Max 2013并尝试使用32位和64位版本。

谢谢,

1 个答案:

答案 0 :(得分:0)

请注意,我无权访问3DS Max,我的答案基于我从MATLAB连接到其他OLE和COM服务器的经验(例如Microsoft Office和OPC服务器)。

我很确定如果h = actxserver('Max.Application.15')工作正常并且没有给出错误消息,那么您已成功设置并连接到OLE服务器。

问题更可能是因为maxCommand在3DS Max中所做的任何事情都使用了错误的语法。例如,它可能需要输入参数。请注意,MATLAB错误消息有点椭圆 - 它表示没有适当的方法,属性或字段,而不是没有方法,属性或字段。我发现获取此消息的一个常见原因是我调用的方法确实存在,但没有以正确的方式调用它。

要找出maxCommand所期望的语法,请尝试输入methodsview(h)。这将为您提供h的所有方法的列表,以及它们的预期输入类型,并可能会提示您如何调用maxCommand

希望有所帮助 - 我担心如果没有3DS Max副本,我就无法做更多事情。

修改

快速浏览一下您提供的3DS Max文档链接,看起来有一个简单的函数maxVersion,它不需要任何输入参数,只返回3DS Max的版本号。尝试运行h.maxVersion作为一个简单的测试,看看你是否已经成功连接到服务器,同时避免了对maxCommand的输入参数的任何潜在混淆。