CF_EXPORT void CFPlugInRemoveInstanceForFactory(CFUUIDRef factoryID) { _CFPFactory *factory = _CFPFactoryFind(factoryID, true); if (!factory) { /* MF:!!! Error. Could not find factory. */ } else { _CFPFactoryRemoveInstance(factory); } }
CF_EXPORT Boolean CFPlugInUnregisterPlugInType(CFUUIDRef factoryID, CFUUIDRef typeID) { _CFPFactory *factory = _CFPFactoryFind(factoryID, true); if (!factory) { /* MF:!!! Error. Could not find factory. */ } else { _CFPFactoryRemoveType(factory, typeID); } return true; }
CF_EXPORT Boolean CFPlugInRegisterPlugInType(CFUUIDRef factoryID, CFUUIDRef typeID) { _CFPFactory *factory = _CFPFactoryFind(factoryID, true); if (!factory) { /* MF:!!! Error. Factory must be registered (and not disabled) before types can be associated with it. */ } else { _CFPFactoryAddType(factory, typeID); } return true; }
CF_EXPORT Boolean CFPlugInUnregisterFactory(CFUUIDRef factoryID) { _CFPFactory *factory = _CFPFactoryFind(factoryID, true); if (!factory) { /* MF:!!! Error. No factory registered for this ID. */ } else { _CFPFactoryDisable(factory); } return true; }
CF_EXPORT CFPlugInInstanceRef CFPlugInInstanceCreateWithInstanceDataSize(CFAllocatorRef allocator, CFIndex instanceDataSize, CFPlugInInstanceDeallocateInstanceDataFunction deallocateInstanceFunction, CFStringRef factoryName, CFPlugInInstanceGetInterfaceFunction getInterfaceFunction) { CFPlugInInstanceRef instance; UInt32 size; size = sizeof(struct __CFPlugInInstance) + instanceDataSize - sizeof(CFRuntimeBase); instance = (CFPlugInInstanceRef)_CFRuntimeCreateInstance(allocator, __kCFPlugInInstanceTypeID, size, NULL); if (!instance) return NULL; instance->factory = _CFPFactoryFind((CFUUIDRef)factoryName, true); if (instance->factory) _CFPFactoryAddInstance(instance->factory); instance->getInterfaceFunction = getInterfaceFunction; instance->deallocateInstanceDataFunction = deallocateInstanceFunction; return instance; }
CF_EXPORT void *CFPlugInInstanceCreate(CFAllocatorRef allocator, CFUUIDRef factoryID, CFUUIDRef typeID) { _CFPFactory *factory = _CFPFactoryFind(factoryID, true); void *result = NULL; if (!factory) { /* MF:!!! No such factory. */ CFLog(__kCFLogPlugIn, CFSTR("Cannot find factory %@"), factoryID); } else { if (!_CFPFactorySupportsType(factory, typeID)) { /* MF:!!! Factory does not support type. */ CFLog(__kCFLogPlugIn, CFSTR("Factory %@ does not support type %@"), factoryID, typeID); } else { result = _CFPFactoryCreateInstance(allocator, factory, typeID); } } return result; }