objcrtl20.pas 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. {
  2. objcrtl20.pas
  3. Copyright (C) 2009 Dmitry Boyarintsev
  4. This unit is implementation for dynamic Objective-C Run-time Library based on run-time version 2.0
  5. headers included with XCode 3.1.2
  6. The original copyright note of is kept on each include file
  7. }
  8. unit objcrtl20;
  9. {$mode objfpc}{$H+}
  10. interface
  11. uses
  12. objcrtl, dynlibs;
  13. function InitializeObjcRtl20(const ObjCLibName: AnsiString): Boolean;
  14. implementation
  15. function InitializeObjcRtl20(const ObjCLibName: AnsiString): Boolean;
  16. var
  17. hnd : TLibHandle;
  18. begin
  19. hnd := LoadLibrary(ObjCLibName);
  20. Result := hnd <> 0;
  21. if not Result then Exit;
  22. LoadDefaultObjCExepction(hnd);
  23. LoadDefaultObjCSync(hnd);
  24. Pointer(sel_getName) := GetProcedureAddress(hnd, 'sel_getName');
  25. Pointer(sel_registerName) := GetProcedureAddress(hnd, 'sel_registerName');
  26. Pointer(object_getClassName) := GetProcedureAddress(hnd, 'object_getClassName');
  27. Pointer(object_getIndexedIvars) := GetProcedureAddress(hnd, 'object_getIndexedIvars');
  28. Pointer(sel_isMapped) := GetProcedureAddress(hnd, 'sel_isMapped');
  29. Pointer(sel_getUid) := GetProcedureAddress(hnd, 'sel_getUid');
  30. Pointer(object_copy) := GetProcedureAddress(hnd, 'object_copy');
  31. Pointer(object_dispose) := GetProcedureAddress(hnd, 'object_dispose');
  32. Pointer(object_getClass) := GetProcedureAddress(hnd, 'object_getClass');
  33. Pointer(object_setClass) := GetProcedureAddress(hnd, 'object_setClass');
  34. Pointer(object_getIvar) := GetProcedureAddress(hnd, 'object_getIvar');
  35. Pointer(object_setIvar) := GetProcedureAddress(hnd, 'object_setIvar');
  36. Pointer(object_setInstanceVariable) := GetProcedureAddress(hnd, 'object_setInstanceVariable');
  37. Pointer(object_getInstanceVariable) := GetProcedureAddress(hnd, 'object_getInstanceVariable');
  38. Pointer(objc_getClass) := GetProcedureAddress(hnd, 'objc_getClass');
  39. Pointer(objc_getMetaClass) := GetProcedureAddress(hnd, 'objc_getMetaClass');
  40. Pointer(objc_lookUpClass) := GetProcedureAddress(hnd, 'objc_lookUpClass');
  41. Pointer(objc_getRequiredClass) := GetProcedureAddress(hnd, 'objc_getRequiredClass');
  42. Pointer(objc_getFutureClass) := GetProcedureAddress(hnd, 'objc_getFutureClass');
  43. Pointer(objc_setFutureClass) := GetProcedureAddress(hnd, 'objc_setFutureClass');
  44. Pointer(objc_getClassList) := GetProcedureAddress(hnd, 'objc_getClassList');
  45. Pointer(objc_getProtocol) := GetProcedureAddress(hnd, 'objc_getProtocol');
  46. Pointer(objc_copyProtocolList) := GetProcedureAddress(hnd, 'objc_copyProtocolList');
  47. Pointer(class_getName) := GetProcedureAddress(hnd, 'class_getName');
  48. Pointer(class_isMetaClass) := GetProcedureAddress(hnd, 'class_isMetaClass');
  49. Pointer(class_getSuperclass) := GetProcedureAddress(hnd, 'class_getSuperclass');
  50. Pointer(class_setSuperclass) := GetProcedureAddress(hnd, 'class_setSuperclass');
  51. Pointer(class_getVersion) := GetProcedureAddress(hnd, 'class_getVersion');
  52. Pointer(class_setVersion) := GetProcedureAddress(hnd, 'class_setVersion');
  53. Pointer(class_getInstanceSize) := GetProcedureAddress(hnd, 'class_getInstanceSize');
  54. Pointer(class_getInstanceVariable) := GetProcedureAddress(hnd, 'class_getInstanceVariable');
  55. Pointer(class_getClassVariable) := GetProcedureAddress(hnd, 'class_getClassVariable');
  56. Pointer(class_copyIvarList) := GetProcedureAddress(hnd, 'class_copyIvarList');
  57. Pointer(class_getInstanceMethod) := GetProcedureAddress(hnd, 'class_getInstanceMethod');
  58. Pointer(class_getClassMethod) := GetProcedureAddress(hnd, 'class_getClassMethod');
  59. Pointer(class_getMethodImplementation) := GetProcedureAddress(hnd, 'class_getMethodImplementation');
  60. Pointer(class_getMethodImplementation_stret) := GetProcedureAddress(hnd, 'class_getMethodImplementation_stret');
  61. Pointer(class_respondsToSelector) := GetProcedureAddress(hnd, 'class_respondsToSelector');
  62. Pointer(class_copyMethodList) := GetProcedureAddress(hnd, 'class_copyMethodList');
  63. Pointer(class_conformsToProtocol) := GetProcedureAddress(hnd, 'class_conformsToProtocol');
  64. Pointer(class_copyProtocolList) := GetProcedureAddress(hnd, 'class_copyProtocolList');
  65. Pointer(class_getProperty) := GetProcedureAddress(hnd, 'class_getProperty');
  66. Pointer(class_copyPropertyList) := GetProcedureAddress(hnd, 'class_copyPropertyList');
  67. Pointer(class_getIvarLayout) := GetProcedureAddress(hnd, 'class_getIvarLayout');
  68. Pointer(class_getWeakIvarLayout) := GetProcedureAddress(hnd, 'class_getWeakIvarLayout');
  69. Pointer(class_createInstance) := GetProcedureAddress(hnd, 'class_createInstance');
  70. Pointer(objc_allocateClassPair) := GetProcedureAddress(hnd, 'objc_allocateClassPair');
  71. Pointer(objc_registerClassPair) := GetProcedureAddress(hnd, 'objc_registerClassPair');
  72. Pointer(objc_duplicateClass) := GetProcedureAddress(hnd, 'objc_duplicateClass');
  73. Pointer(objc_disposeClassPair) := GetProcedureAddress(hnd, 'objc_disposeClassPair');
  74. Pointer(class_addMethod) := GetProcedureAddress(hnd, 'class_addMethod');
  75. Pointer(class_replaceMethod) := GetProcedureAddress(hnd, 'class_replaceMethod');
  76. Pointer(class_addIvar) := GetProcedureAddress(hnd, 'class_addIvar');
  77. Pointer(class_addProtocol) := GetProcedureAddress(hnd, 'class_addProtocol');
  78. Pointer(class_setIvarLayout) := GetProcedureAddress(hnd, 'class_setIvarLayout');
  79. Pointer(class_setWeakIvarLayout) := GetProcedureAddress(hnd, 'class_setWeakIvarLayout');
  80. Pointer(method_getName) := GetProcedureAddress(hnd, 'method_getName');
  81. Pointer(method_getImplementation) := GetProcedureAddress(hnd, 'method_getImplementation');
  82. Pointer(method_getTypeEncoding) := GetProcedureAddress(hnd, 'method_getTypeEncoding');
  83. Pointer(method_getNumberOfArguments) := GetProcedureAddress(hnd, 'method_getNumberOfArguments');
  84. Pointer(method_copyReturnType) := GetProcedureAddress(hnd, 'method_copyReturnType');
  85. Pointer(method_copyArgumentType) := GetProcedureAddress(hnd, 'method_copyArgumentType');
  86. Pointer(method_getReturnType) := GetProcedureAddress(hnd, 'method_getReturnType');
  87. Pointer(method_getArgumentType) := GetProcedureAddress(hnd, 'method_getArgumentType');
  88. Pointer(method_getDescription) := GetProcedureAddress(hnd, 'method_getDescription');
  89. Pointer(method_setImplementation) := GetProcedureAddress(hnd, 'method_setImplementation');
  90. Pointer(method_exchangeImplementations) := GetProcedureAddress(hnd, 'method_exchangeImplementations');
  91. Pointer(ivar_getName) := GetProcedureAddress(hnd, 'ivar_getName');
  92. Pointer(ivar_getTypeEncoding) := GetProcedureAddress(hnd, 'ivar_getTypeEncoding');
  93. Pointer(ivar_getOffset) := GetProcedureAddress(hnd, 'ivar_getOffset');
  94. Pointer(property_getName) := GetProcedureAddress(hnd, 'property_getName');
  95. Pointer(property_getAttributes) := GetProcedureAddress(hnd, 'property_getAttributes');
  96. Pointer(protocol_conformsToProtocol) := GetProcedureAddress(hnd, 'protocol_conformsToProtocol');
  97. Pointer(protocol_isEqual) := GetProcedureAddress(hnd, 'protocol_isEqual');
  98. Pointer(protocol_getMethodDescription) := GetProcedureAddress(hnd, 'protocol_getMethodDescription');
  99. Pointer(protocol_copyMethodDescriptionList) := GetProcedureAddress(hnd, 'protocol_copyMethodDescriptionList');
  100. Pointer(protocol_getProperty) := GetProcedureAddress(hnd, 'protocol_getProperty');
  101. Pointer(protocol_copyPropertyList) := GetProcedureAddress(hnd, 'protocol_copyPropertyList');
  102. Pointer(protocol_copyProtocolList) := GetProcedureAddress(hnd, 'protocol_copyProtocolList');
  103. Pointer(objc_copyImageNames) := GetProcedureAddress(hnd, 'objc_copyImageNames');
  104. Pointer(class_getImageName) := GetProcedureAddress(hnd, 'class_getImageName');
  105. Pointer(objc_copyClassNamesForImage) := GetProcedureAddress(hnd, 'objc_copyClassNamesForImage');
  106. Pointer(sel_isEqual) := GetProcedureAddress(hnd, 'sel_isEqual');
  107. Pointer(objc_enumerationMutation) := GetProcedureAddress(hnd, 'objc_enumerationMutation');
  108. Pointer(objc_setEnumerationMutationHandler) := GetProcedureAddress(hnd, 'objc_setEnumerationMutationHandler');
  109. Pointer(objc_setForwardHandler) := GetProcedureAddress(hnd, 'objc_setForwardHandler');
  110. //Messaging
  111. LoadDefaultObjCMessaging(hnd);
  112. Pointer(method_invoke) := GetProcedureAddress(hnd, 'method_invoke');
  113. Pointer(method_invoke_stret) := GetProcedureAddress(hnd, 'method_invoke_stret');
  114. Pointer(objc_collect) := GetProcedureAddress(hnd, 'objc_collect');
  115. Pointer(objc_collectingEnabled) := GetProcedureAddress(hnd, 'objc_collectingEnabled');
  116. end;
  117. end.