> Erick Thompson spake:
>
> How would I go about using the IFilter[1] interface from C#? From what I
> gather, it's not an automation interface (== not a COM object?),
> so I'm not
> sure where to start.
>
> Thanks,
> Erick
>
> [1]
> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/i
ndexsrv/ixrefint_9sfm.asp


If there is a type library, you could use the tlbimp utility to generate a
proxy assembly.

If there is no type library, you can create your own Runtime Callable
Wrappers (RCWs).

Here is an RCW for IClassFactory:

===>
[ComVisible(true)]
[Guid("00000001-0000-0000-c000-000000000046")]
[CLSCompliant(false)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IClassFactory
{
        [PreserveSig]
        Int32 CreateInstance(
                IntPtr pUnkOuter,
                [In] ref Guid refiid,
                IntPtr ppvObject);
        void LockServer(
                [MarshalAs(UnmanagedType.Bool)] Boolean fLock);
}
<===

And here is an RCW for IPersistStreamInit:
===>
[ComVisible(true)]
[Guid("7fd52380-4e07-101b-ae2d-08002b2ec713")]
[CLSCompliant(false)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IPersistStreamInit
{
        void GetClassID(out Guid pClassID);
        [PreserveSig]
        Int32 IsDirty();
        void Load(IStream stream);
        void Save(IStream stream, [MarshalAs(UnmanagedType.Bool)] Boolean
fClearDirty);
        UInt64 GetSizeMax();
        void InitNew();
}
<===

If you call a DLL routine to get your interface pointer, setup your p/invoke
as follows:
// P/Invoke functions
[DllImport("urlmon.dll")]
private static extern Int32 CoInternetGetSession(
        UInt32 dwSessionMode,
        ref IInternetSession ppIInternetSession,
        UInt32 dwReserved);

--
Peter

You can read messages from the DOTNET archive, unsubscribe from DOTNET, or
subscribe to other DevelopMentor lists at http://discuss.develop.com.

Reply via email to