You don't need to create a managed definition for COM IDispatch
or implement its members explicitly. The Framework has a built-in support for it. Just declare your OpenService
like this:
[DispId(6)]
int OpenService(
[In, MarshalAs(UnmanagedType.BStr)] string lpclDevClass,
[In, MarshalAs(UnmanagedType.BStr)] string lpclDevName,
[In, MarshalAs(UnmanagedType.IDispatch] object lpDispatch);