Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 3ds Max.NET SDK和创建参考生成器_C#_.net_C++ Cli_3dsmax - Fatal编程技术网

C# 3ds Max.NET SDK和创建参考生成器

C# 3ds Max.NET SDK和创建参考生成器,c#,.net,c++-cli,3dsmax,C#,.net,C++ Cli,3dsmax,我有.Net DLL for Max和ui,我想对视口中某些节点的参数更改做出反应。我想到的最简单的解决方案是创建ReferenceMaker插件,并为我想要观看的节点设置引用。根据文件,它应该是 public class ReferenceListener : Autodesk.Max.Plugins.ReferenceMaker{ ... } 但当我创建这个类的新实例并尝试设置引用时,它在“对象引用未设置为对象的实例”时崩溃 当我试着调试它时,我看到所有的基类属性都是空的,所以它表明Re

我有.Net DLL for Max和ui,我想对视口中某些节点的参数更改做出反应。我想到的最简单的解决方案是创建ReferenceMaker插件,并为我想要观看的节点设置引用。根据文件,它应该是

 public class ReferenceListener : Autodesk.Max.Plugins.ReferenceMaker{ ... }
但当我创建这个类的新实例并尝试设置引用时,它在“对象引用未设置为对象的实例”时崩溃 当我试着调试它时,我看到所有的基类属性都是空的,所以它表明ReferenceMaker插件实例不是在Max中创建的

最后我找到了MaxSharp源代码,但使用生成的dll让我得到了相同的结果,坦率地说,实现与以前一样安静。尝试将ReferenceListener始终附加到ReferenceTarget会崩溃,因为基类中存在null。 所以我真的不知道如何解决这个问题,但也许有人试图创造这样的东西并成功了?目前,我正在考虑将这些参数更改回调写回maxscript,并从中调用.net,但感觉有点不对劲。。 我使用的是Max 2014(MaxSharp适用于2013年),但我没有发现文档中提到的任何差异,如有任何帮助,将不胜感激

多谢各位

更新

所以,我把它缩小到一个非常奇怪的问题。我已经创建了C++ + CLI插件,在C++ SDK中做了RealCuxMeCK类,并用.Net包装器调用插件C语言,但是它仍然没有使用相同的症状。 Autodesk.Max wrapper对象中似乎存储了错误的指针地址,因此这就是它失败的原因。我做了一个比较,从.NETDLL和C++ SDK返回的指针,它们总是64的不同。而且总是这样

C++/CLI代码

IINode^ al =  Autodesk::Max::GlobalInterface::Instance->COREInterface->GetSelNode(0);
IReferenceTarget^ ak = (IReferenceTarget^)al;
ReferenceTarget* nativeTarget = (ReferenceTarget*)ak->Handle.ToPointer();
m_notifyListener->Test(nativeTarget);
C++Max-SDK代码

void NotifyListener::Test(RefTargetHandle managedPointer)
{
     Interface* ip = GetCOREInterface();

     RefTargetHandle nativePointer = ip->GetSelNode(0);
     intptr_t P1 = (intptr_t)managedPointer;
     intptr_t P2 = (intptr_t)nativePointer ;
}
结果变量是

P1 = 1490452112
P2 = 1490452048
P2总是比P1小64倍。 如果这些指针是完全不同的,我会理解的,但这种轻微的变化对我来说真的很奇怪。 有人知道那里发生了什么吗?这是我真的不明白的

我需要测试Max 2013或2015年的行为是否与2014年相同。我在其他一些论坛上看到,其他人在抱怨2014年的示例.net插件不起作用,所以这可能就是原因

谢谢你的建议