The IDL file consists of one or more interface definitions, each of which has a header and a body. The header contains information that applies to the entire interface, such as the UUID. This information is enclosed in square brackets and is followed by the keyword interface and the interface name. The body contains C-style data type definitions and function prototypes, augmented with attributes that describe how the data is transmitted over the network.
In our example, the interface header contains only the UUID and the version number. The version number ensures that, when there are multiple versions of an RPC interface, only compatible versions of the client and server will be connected.
The interface body contains the function prototype for HelloProc. The function parameter pszString has the attributes in and string. The in attribute tells the run-time library that the parameter is passed only from the client to the server. The string attribute specifies that the stub should treat the parameter as a C-style character string.
We want the client application to be able to shut down the server application, so we add a prototype for another remote function, Shutdown, that we will implement later in this tutorial.
//file hello.idl
[
uuid(7a98c250-6808-11cf-b73b-00aa00b677a7),
version(1.0)
]
interface hello
{
void HelloProc([in, string] unsigned char * pszString);
void Shutdown(void);
}