Parameter types can be changed by deleting and adding a new parameter. To migrate from the old value a post-load callback must be used. The old parameter ids will be used until after the load and all post-load callbacks are completed
The following example demonstrates how you might do this:
IParamBlock* pBlock; class TestClassPLCB : public PostLoadCallback { TestClass* parent; public: TestClassPLCB( TestClass* p ) : parent(p) { } voidproc(ILoad *iload) { parent->PostLoadCallback(iload); delete this; } }; void TestClass::PostLoadCallback( ILoad* iload ) { IParamBlock2PostLoadInfo* postLoadInfo = (IParamBlock2PostLoadInfo*) pblock->GetInterface( IPARAMBLOCK2POSTLOADINFO_ID ); // Check for specific obsolete version if(postLoadInfo!=NULL && postLoadInfo->GetVersion()==OBSOLETE_VERSION) { // get the original value BOOL onOff = pblock->GetInt(pb_onOff_OBSOLETE, 0, 0); //set the original value pblock->SetValue( pb_onOff, 0, onOff ); // see if it has a controller Control* onOffCtrl=pblock->GetController(pb_onOff_OBSOLETE,0); // if a controller exists add it to the new parameter if( onOffCtrl ) pblock->SetController(pblock->IDtoIndex(pb_onOff),0,onOffCtrl); // NOTE: not necessary to set obsolete params to NULL, // or unlink controllers/references } }