我有一个用于 3ds Max 的自定义插件,它与后端的一些托管代码交互。在某些情况下,我想将托管对象转发到 MAXScript 以进行直接交互,即从我的一个函数返回一个包装的对象。
MAXScript 能够通过 Max 附带的另一个插件 (msxdotNet) 直接相对较好地操作托管对象(我使用的是 3ds Max 2008)。它基本上包装了一个对象并使用反射来进行后期绑定调用,但它完全是自包含的,没有任何 sdk 暴露。除了 Max 添加一些顶级脚本类所需的最小接口外,插件 dll 本身也没有暴露任何东西。
脚本类允许通过构造函数实例化一个新对象
local inst = (dotNetObject "MyPlugin.MyClass" 0 0 "arg3")
就我而言,我已经有一个我想使用的对象的实例。
有没有办法从我的插件中构造一个 dotNetObject 包装器的实例以返回 Max?
理想情况下,我想要一个带有(C++/CLI)签名的辅助函数,类似于:
Value* WrapObject(System::Object ^obj);
我可以做出的一些基本保证:
- msxdotNet 插件已加载。
- msxdotNet 插件和我的托管程序集位于同一个 AppDomain 中。
msxdotNet 插件的源代码作为sdk 示例包含在内,但出于管理/理智的考虑,修改它并重新编译它不是一种选择。