APIModulDataSaveOldFormatHandlerProc
모듈들을 예전 포맷으로 변환하기 위한 사용자 지원 콜백 프로시저입니다.
typedef GSErrCode APIModulDataSaveOldFormatHandlerProc ( API_FTypeID planFileType, GS::HashTable<GS::UniString, API_ModulData*>& modulesToSave );
파라미터
- planFileType
- [in] 저장되는 프로젝트의 예전 포맷 도면 버전입니다. ArchiCAD 13에서 이것은
APIFType_PlanFile1200
만 될 수 있습니다. - modulesToSave
- [out] 변환된 모듈 데이터를 가져올 해시(hash) 테이블입니다.
리턴 값
NoError
- 함수가 성공적으로 완료되었습니다.
다른 공통 API 오류들에 대해서는 API 오류 문서를 보십시오.
설명
애드온의 moduldata를 예전 버전 프로젝트 파일에 적절한 포맷으로 저장하려면, 이 콜백 함수를 구현하고 Initialize 단계에서 ACAPI_Install_ModulDataSaveOldFormatHandler로 ArchiCAD에 그것을 전달할 필요가 있습니다. 또한 RegisterInterface 함수로부터 ACAPI_Register_ModulDataHandler를 호출하여 애드온의 이 기능에 대하여 ArchiCAD에게 알릴 필요가 있습니다.
사용자가 프로젝트를 예전 포맷으로 저장할 때마다 이 핸들러 함수가 호출되며, 애드온은 현재 프로젝트에 저장된 아무 moduldata를 갖고 있습니다.
데이터는 요구되는 버전에 따라 동적으로 할당된 API_ModulData structure로 생성되어야 하며,
이 structure의 포인터는 modulesToSave 테이블로 집어넣어야 합니다.
더 많은 모듈들이 추가될 수 있으며 서로 다른 이름들로 식별되어야 한다는 것을 참고하십시오.
ArchiCAD 버전 13 이전에서는 애드온 당 하나의 moduldata만 저장할 수 있었습니다. 이 moduldata는 빈 문자열 식별자("")로 저장되어야 합니다.
애드온의 핸들러 함수에 의해 변환된 moduldata에 대하여 할당된 메모리는 호출자 애플리케이션에 의해 해제될 것입니다.
알림 프로젝트의 더 자세한 것은 ModulData 관리자 섹션을 참조하십시오.
예제
콜백 등록 및 설치하기:
GSErrCode __ACENV_CALL RegisterInterface (void) { ACAPI_Register_ModulDataHandler (); return NoError; } GSErrCode __ACENV_CALL Initialize (void) { GSErrCode err = ACAPI_Install_ModulDataSaveOldFormatHandler (APIModulDataSaveAsOldFormat); return err; }
핸들러 함수의 구현:
GSErrCode __ACENV_CALL APIModulDataSaveAsOldFormat (API_FTypeID planFileType, GS::HashTable<GS::UniString, API_ModulData*>& modulesToSave) { GSErrCode err = NoError; if (planFileType == APIFType_PlanFile1200) { GS::Array<GS::UniString> modulNameList; ACAPI_ModulData_GetList (&modulNameList); USize nObjects = modulNameList.GetSize (); if (nObjects > 0) { API_ModulData* oldFormatModulData = new API_ModulData; // must be allocated on the heap if (oldFormatModulData != NULL) { BNZeroMemory (oldFormatModulData, sizeof (API_ModulData)); oldFormatModulData->dataVersion = 0; oldFormatModulData->platformSign = GS::Act_Platform_Sign; oldFormatModulData->dataHdl = BMAllocateHandle (nObjects * sizeof (Int32), 0, 0); if (oldFormatModulData->dataHdl != NULL) { Int32* dataPtr = reinterpret_cast<Int32*> (*oldFormatModulData->dataHdl); for (GS::Array<GS::UniString>::ConstIterator it = modulNameList.Enumerate (); it != NULL; ++it) { API_ModulData modulData; BNZeroMemory (&modulData, sizeof (API_ModulData)); if (ACAPI_ModulData_Get (&modulData, *it) == NoError) { *dataPtr = *(reinterpret_cast<Int32*> (*modulData.dataHdl)); dataPtr++; } BMKillHandle (&modulData.dataHdl); } modulesToSave.Put ("", oldFormatModulData); } else { err = APIERR_MEMFULL; } } } else { err = APIERR_NOMODULEDATA; } } return err; }
더 많은 힌트에 대해서는 ModulData 관리자 예제 애드온을 참조하십시오.
요구사항
- 버전: API 13 또는 이후
- 헤더: APIdefs_Callback.h
참고사항
API_ModulData
ACAPI_Install_ModulDataSaveOldFormatHandler
ACAPI_Register_ModulDataHandler
ModulData 관리자
API 함수