1

首先,感谢阅读本文并为我提供一些帮助/反馈的人,因为我已经为此苦苦挣扎了几天。我是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 位版本。

谢谢,

4

1 回答 1

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.

于 2014-04-22T10:16:13.700 回答