[MSCE C++] DependencyManagerLinkage::AppendLinkage添加无法成功

符老师,你好!

我参照C:\Program Files\Bentley\MicroStationCONNECTSDK\examples\Elements\DependencyDemo用C++ Clr写了一段类似的代码。程序返回结果Linkage表明Linkage追加成功,但是检查Linkage是否存在时无法找到对应数据,请问一下这个是什么原因?

    ElementId mId(mainId);
	ElementId sId(subId);
	DgnModelRefP subDgnModelRef = (DgnModelRef*)(subDgnModelRefP.ToPointer());
	EditElementHandleR  subEditElementHandle= EditElementHandle(sId, subDgnModelRef);
	DependencyLinkage depLinkage;
	StatusInt exsit = DependencyManagerLinkage::GetLinkage(nullptr, subEditElementHandle, appID, appValue);
	if (exsit != SUCCESS)
	{
		DependencyLinkage depLinkage;
		if (SUCCESS == DependencyManagerLinkage::InitLinkage(depLinkage, appID, appValue, DEPENDENCY_ON_COPY_DropDependency))
		{
			depLinkage.nRoots = 1;
			depLinkage.appValue = appValue;
			// Add the first element as root
			depLinkage.root.elemid[0] = mId;
		}
		ElementRefP oldFirstRef = subEditElementHandle.GetElementRef();
		StatusInt append =  DependencyManagerLinkage::AppendLinkage(subEditElementHandle, depLinkage, 0);
		//append结果为SUCCESS
		if (SUCCESS == subEditElementHandle.ReplaceInModel(oldFirstRef))
			return true;
	 }		
	return false;

我再次调用这段代码时,发现DependencyManagerLinkage::GetLinkage始终没有。

Parents
  • 1. 您这段代码在nativeCode C++下能执行成功吗?

    2. subEditElementHandle.ReplaceInModel这一行返回的是SUCCESS吗?

    3. 将EditElementHandleR  subEditElementHandle= EditElementHandle(sId, subDgnModelRef);换成如下一行试一下:

         EditElementHandle  subEditElementHandle(sId, subDgnModelRef);



  • 符老师,你好!我在Native下也测试,效果和Clr一样。

    unsigned int appID = 1111;
    	unsigned int appValue = 2222;
    	ElementId mId(1403);
    	ElementId sId(1404);
    	EditElementHandle subElementHandle(sId, ACTIVEMODEL);
    	EditElementHandleR  subEditElementHandle = subElementHandle;
    	DependencyLinkage depLinkage;
    	StatusInt exsit = DependencyManagerLinkage::GetLinkage(nullptr, subEditElementHandle, appID, appValue);
    	if (exsit != SUCCESS)
    	{
    		if (SUCCESS == DependencyManagerLinkage::InitLinkage(depLinkage, appID, appValue, DEPENDENCY_ON_COPY_DropDependency))
    		{
    			depLinkage.nRoots = 1;
    			depLinkage.appValue = appValue;
    			// Add the first element as root
    			depLinkage.root.elemid[0] = mId;
    		}
    		ElementRefP oldFirstRef = subEditElementHandle.GetElementRef();
    		StatusInt append = DependencyManagerLinkage::AppendLinkage(subEditElementHandle, depLinkage, 0);
    		if (append != SUCCESS)
    		{
    			return;
    		}
    		
    		if (SUCCESS == subEditElementHandle.ReplaceInModel(oldFirstRef))
    		{
    			wprintf(L"AppendLinkage success");
    		}
    			
    	}
    	wprintf(L"AppendLinkage false");
        return;

  • 我仔细看了一下帮助文档,你对InitLinkage函数的第三个参数的传递似乎是有问题的。它需要是DEPENDENCY_DATA_TYPE_ELEM_ID

    你现在给出了2222这个值,系统中是没有定义的。

    另外,你对appId的类型声明也是错误的,应该是UShort(unsigned short)而不是unsigned int。

    SDK中带的例子对第三个参数给了DEPENDENCYAPPID_SDKSamples,而DEPENDENCYAPPID_SDKSamples被定义为1,恰好对应上了DEPENDENCY_DATA_TYPE_ELEM_ID_V,也是可以的。但这确实误导了读者,估计写实例代码的是一个小白,对该函数的理解也不到位。



    Answer Verified By: 刘 呈斌 

  • 您好  刘工

    请问您 这个最后是怎么解决的? 我也遇见这样的问题了... AppendLinkage写不进去 报错

Reply Children
No Data