This sample is an example of a simple OLE server and a simple client app. The server has one public class and two private classes. The client uses the server's public class to ask for ptrs to the private classes. This indirection is useful in a multiuser remote automation scenario to prevent concurrent client request's from blocking each other in OLE's apartment threading model. For example: Server "Bar" has two public classes: A and B. Client 1 asks for an instance of A. OLE creates an instance of Bar (which is also a single threaded apartment) and gives client 1 a ptr to A. Client 1 asks A to perform a very long task. The only thread of this instance of Bar is now dedicated to this task. Client 2 now asks for an instance of B. OLE, realizes that B has not been allocated in the first instance of Bar... and it passes client 2 a handle to B in the 1st instance of Bar. Client 2 calls a method in B... and is now blocked waiting for the the thread to complete the task client 1 asked it do do in class A. This "interface" sample app avoids this problem by only exposing a *single* public "interface" class to front end the worker classes of the server. In this way, each client request for the interface class forces OLE to create a new instance (apartment/thread) of the server. This means that each client will get their own thread... and they therefore cannot block eachother. This app also demonstrates how ptrs to objects can be passed and used.