|
|
1.1 root 1: /*
2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * "Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7: * Reserved. This file contains Original Code and/or Modifications of
8: * Original Code as defined in and that are subject to the Apple Public
9: * Source License Version 1.0 (the 'License'). You may not use this file
10: * except in compliance with the License. Please obtain a copy of the
11: * License at http://www.apple.com/publicsource and read it before using
12: * this file.
13: *
14: * The Original Code and all software distributed under the License are
15: * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
19: * License for the specific language governing rights and limitations
20: * under the License."
21: *
22: * @APPLE_LICENSE_HEADER_END@
23: */
24:
25: #import <objc/Object.h>
26: #import <objc/objc-load.h>
27: #import <string.h>
28: #import <stdio.h>
29: #import "Car.h"
30:
31: @interface Jar : Object @end
32:
33: @interface Bar : Object @end
34:
35: @implementation Bar
36:
37: static int myHandler(char *name)
38: {
39: char buf[256];
40: char *names[] = { buf, 0 };
41:
42: strcpy(buf,name); strcat(buf,".o");
43:
44: objc_loadModule(names, 0, 0);
45:
46: return 1;
47: }
48:
49: + finishLoading:hdr
50: {
51: Car *aCar;
52:
53: objc_setClassHandler(myHandler);
54:
55: aCar = [objc_getClass("Car") new];
56:
57: printf("+++ loading class Bar\n");
58:
59: // dynamically loaded.
60: if ([aCar respondsTo:@selector(drive)]) {
61: printf("aCar can `drive'\n");
62: [aCar drive];
63: } else
64: printf("aCar cannot `drive'\n");
65:
66: if ([aCar respondsTo:@selector(stop)]) {
67: printf("aCar can `stop'\n");
68: [aCar stop];
69: } else {
70: printf("aCar cannot `stop'\n");
71: #if 0
72: {
73: char *names[] = { "CategoryOfCar.o", 0 };
74: objc_loadModule(names, 0, 0);
75: [aCar stop];
76: objc_unloadLastModule(0);
77: [aCar stop];
78: }
79: #endif
80: }
81: return self;
82: }
83:
84: + startUnloading
85: {
86: printf("+++ unloading class Bar\n");
87: return self;
88: }
89:
90: @end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.