Files
lazarus-ccr/bindings/objc/objcrtl20.pas

161 lines
8.3 KiB
ObjectPascal

{
objcrtl20.pas
Copyright (C) 2009 Dmitry Boyarintsev
This unit is implementation for dynamic Objective-C Run-time Library based on run-time version 2.0
headers included with XCode 3.1.2
The original copyright note of is kept on each include file
}
unit objcrtl20;
{$mode objfpc}{$H+}
interface
uses
objcrtl, dynlibs;
function InitializeObjcRtl20(const ObjCLibName: AnsiString): Boolean;
implementation
function InitializeObjcRtl20(const ObjCLibName: AnsiString): Boolean;
var
hnd : TLibHandle;
begin
hnd := LoadLibrary(ObjCLibName);
Result := hnd <> 0;
if not Result then Exit;
LoadDefaultObjCExepction(hnd);
LoadDefaultObjCSync(hnd);
Pointer(sel_getName) := GetProcedureAddress(hnd, 'sel_getName');
Pointer(sel_registerName) := GetProcedureAddress(hnd, 'sel_registerName');
Pointer(object_getClassName) := GetProcedureAddress(hnd, 'object_getClassName');
Pointer(object_getIndexedIvars) := GetProcedureAddress(hnd, 'object_getIndexedIvars');
Pointer(sel_isMapped) := GetProcedureAddress(hnd, 'sel_isMapped');
Pointer(sel_getUid) := GetProcedureAddress(hnd, 'sel_getUid');
Pointer(object_copy) := GetProcedureAddress(hnd, 'object_copy');
Pointer(object_dispose) := GetProcedureAddress(hnd, 'object_dispose');
Pointer(object_getClass) := GetProcedureAddress(hnd, 'object_getClass');
Pointer(object_setClass) := GetProcedureAddress(hnd, 'object_setClass');
Pointer(object_getIvar) := GetProcedureAddress(hnd, 'object_getIvar');
Pointer(object_setIvar) := GetProcedureAddress(hnd, 'object_setIvar');
Pointer(object_setInstanceVariable) := GetProcedureAddress(hnd, 'object_setInstanceVariable');
Pointer(object_getInstanceVariable) := GetProcedureAddress(hnd, 'object_getInstanceVariable');
Pointer(objc_getClass) := GetProcedureAddress(hnd, 'objc_getClass');
Pointer(objc_getMetaClass) := GetProcedureAddress(hnd, 'objc_getMetaClass');
Pointer(objc_lookUpClass) := GetProcedureAddress(hnd, 'objc_lookUpClass');
Pointer(objc_getRequiredClass) := GetProcedureAddress(hnd, 'objc_getRequiredClass');
Pointer(objc_getFutureClass) := GetProcedureAddress(hnd, 'objc_getFutureClass');
Pointer(objc_setFutureClass) := GetProcedureAddress(hnd, 'objc_setFutureClass');
Pointer(objc_getClassList) := GetProcedureAddress(hnd, 'objc_getClassList');
Pointer(objc_getProtocol) := GetProcedureAddress(hnd, 'objc_getProtocol');
Pointer(objc_copyProtocolList) := GetProcedureAddress(hnd, 'objc_copyProtocolList');
Pointer(class_getName) := GetProcedureAddress(hnd, 'class_getName');
Pointer(class_isMetaClass) := GetProcedureAddress(hnd, 'class_isMetaClass');
Pointer(class_getSuperclass) := GetProcedureAddress(hnd, 'class_getSuperclass');
Pointer(class_setSuperclass) := GetProcedureAddress(hnd, 'class_setSuperclass');
Pointer(class_getVersion) := GetProcedureAddress(hnd, 'class_getVersion');
Pointer(class_setVersion) := GetProcedureAddress(hnd, 'class_setVersion');
Pointer(class_getInstanceSize) := GetProcedureAddress(hnd, 'class_getInstanceSize');
Pointer(class_getInstanceVariable) := GetProcedureAddress(hnd, 'class_getInstanceVariable');
Pointer(class_getClassVariable) := GetProcedureAddress(hnd, 'class_getClassVariable');
Pointer(class_copyIvarList) := GetProcedureAddress(hnd, 'class_copyIvarList');
Pointer(class_getInstanceMethod) := GetProcedureAddress(hnd, 'class_getInstanceMethod');
Pointer(class_getClassMethod) := GetProcedureAddress(hnd, 'class_getClassMethod');
Pointer(class_getMethodImplementation) := GetProcedureAddress(hnd, 'class_getMethodImplementation');
Pointer(class_getMethodImplementation_stret) := GetProcedureAddress(hnd, 'class_getMethodImplementation_stret');
Pointer(class_respondsToSelector) := GetProcedureAddress(hnd, 'class_respondsToSelector');
Pointer(class_copyMethodList) := GetProcedureAddress(hnd, 'class_copyMethodList');
Pointer(class_conformsToProtocol) := GetProcedureAddress(hnd, 'class_conformsToProtocol');
Pointer(class_copyProtocolList) := GetProcedureAddress(hnd, 'class_copyProtocolList');
Pointer(class_getProperty) := GetProcedureAddress(hnd, 'class_getProperty');
Pointer(class_copyPropertyList) := GetProcedureAddress(hnd, 'class_copyPropertyList');
Pointer(class_getIvarLayout) := GetProcedureAddress(hnd, 'class_getIvarLayout');
Pointer(class_getWeakIvarLayout) := GetProcedureAddress(hnd, 'class_getWeakIvarLayout');
Pointer(class_createInstance) := GetProcedureAddress(hnd, 'class_createInstance');
Pointer(objc_allocateClassPair) := GetProcedureAddress(hnd, 'objc_allocateClassPair');
Pointer(objc_registerClassPair) := GetProcedureAddress(hnd, 'objc_registerClassPair');
Pointer(objc_duplicateClass) := GetProcedureAddress(hnd, 'objc_duplicateClass');
Pointer(objc_disposeClassPair) := GetProcedureAddress(hnd, 'objc_disposeClassPair');
Pointer(class_addMethod) := GetProcedureAddress(hnd, 'class_addMethod');
Pointer(class_replaceMethod) := GetProcedureAddress(hnd, 'class_replaceMethod');
Pointer(class_addIvar) := GetProcedureAddress(hnd, 'class_addIvar');
Pointer(class_addProtocol) := GetProcedureAddress(hnd, 'class_addProtocol');
Pointer(class_setIvarLayout) := GetProcedureAddress(hnd, 'class_setIvarLayout');
Pointer(class_setWeakIvarLayout) := GetProcedureAddress(hnd, 'class_setWeakIvarLayout');
Pointer(method_getName) := GetProcedureAddress(hnd, 'method_getName');
Pointer(method_getImplementation) := GetProcedureAddress(hnd, 'method_getImplementation');
Pointer(method_getTypeEncoding) := GetProcedureAddress(hnd, 'method_getTypeEncoding');
Pointer(method_getNumberOfArguments) := GetProcedureAddress(hnd, 'method_getNumberOfArguments');
Pointer(method_copyReturnType) := GetProcedureAddress(hnd, 'method_copyReturnType');
Pointer(method_copyArgumentType) := GetProcedureAddress(hnd, 'method_copyArgumentType');
Pointer(method_getReturnType) := GetProcedureAddress(hnd, 'method_getReturnType');
Pointer(method_getArgumentType) := GetProcedureAddress(hnd, 'method_getArgumentType');
Pointer(method_getDescription) := GetProcedureAddress(hnd, 'method_getDescription');
Pointer(method_setImplementation) := GetProcedureAddress(hnd, 'method_setImplementation');
Pointer(method_exchangeImplementations) := GetProcedureAddress(hnd, 'method_exchangeImplementations');
Pointer(ivar_getName) := GetProcedureAddress(hnd, 'ivar_getName');
Pointer(ivar_getTypeEncoding) := GetProcedureAddress(hnd, 'ivar_getTypeEncoding');
Pointer(ivar_getOffset) := GetProcedureAddress(hnd, 'ivar_getOffset');
Pointer(property_getName) := GetProcedureAddress(hnd, 'property_getName');
Pointer(property_getAttributes) := GetProcedureAddress(hnd, 'property_getAttributes');
Pointer(protocol_conformsToProtocol) := GetProcedureAddress(hnd, 'protocol_conformsToProtocol');
Pointer(protocol_isEqual) := GetProcedureAddress(hnd, 'protocol_isEqual');
Pointer(protocol_getMethodDescription) := GetProcedureAddress(hnd, 'protocol_getMethodDescription');
Pointer(protocol_copyMethodDescriptionList) := GetProcedureAddress(hnd, 'protocol_copyMethodDescriptionList');
Pointer(protocol_getProperty) := GetProcedureAddress(hnd, 'protocol_getProperty');
Pointer(protocol_copyPropertyList) := GetProcedureAddress(hnd, 'protocol_copyPropertyList');
Pointer(protocol_copyProtocolList) := GetProcedureAddress(hnd, 'protocol_copyProtocolList');
Pointer(objc_copyImageNames) := GetProcedureAddress(hnd, 'objc_copyImageNames');
Pointer(class_getImageName) := GetProcedureAddress(hnd, 'class_getImageName');
Pointer(objc_copyClassNamesForImage) := GetProcedureAddress(hnd, 'objc_copyClassNamesForImage');
Pointer(sel_isEqual) := GetProcedureAddress(hnd, 'sel_isEqual');
Pointer(objc_enumerationMutation) := GetProcedureAddress(hnd, 'objc_enumerationMutation');
Pointer(objc_setEnumerationMutationHandler) := GetProcedureAddress(hnd, 'objc_setEnumerationMutationHandler');
Pointer(objc_setForwardHandler) := GetProcedureAddress(hnd, 'objc_setForwardHandler');
//Messaging
LoadDefaultObjCMessaging(hnd);
Pointer(method_invoke) := GetProcedureAddress(hnd, 'method_invoke');
Pointer(method_invoke_stret) := GetProcedureAddress(hnd, 'method_invoke_stret');
Pointer(objc_collect) := GetProcedureAddress(hnd, 'objc_collect');
Pointer(objc_collectingEnabled) := GetProcedureAddress(hnd, 'objc_collectingEnabled');
end;
end.