Q:

C# Как создать и передать IDispatch в COM DLL

На C# надо подключить DLL работающую по COM технологии.
Подключение COM-DLL и вызов из нее функций я написал - документации море.
Но вот в одной функции DLL требует чтобы ей в качестве параметра передали указатель на IDispatch.
B в этом указателе на IDispatch было реализовано два стандартых COM интерфейса : IMsgBox и IPlatformInfo
На C# такое можно сделать? 
Если да то можно которенький примерчик?
Обновление
Не подскажите: нужные мне интерфейсы унаследованы от IUnknown. Мне надо тоже реализовывать интерфейс IUnknown с его функциям (QueryInterface, AddRef...)? 
Получить мне надо вот такой интерфейс:
MIDL_INTERFACE("55272A00-42CB-11CE-8135-00AA004BB851")
IPropertyBag : public IUnknown {
public:
   virtual /* [local] */ HRESULT STDMETHODCALLTYPE Read( 
      /* [in] */ LPCOLESTR pszPropName,
      /* [out][in] */ VARIANT *pVar,
      /* [unique][in] */ IErrorLog *pErrorLog) = 0;

   virtual HRESULT STDMETHODCALLTYPE Write( 
      /* [in] */ __RPC__in LPCOLESTR pszPropName,
      /* [in] */ __RPC__in VARIANT *pVar) = 0;
};

A:

Первое. Добавьте в ваш проект ссылку на COM-библиотеку типов в студии, либо другим образом получите интерфейсы IMsgBox и IPlatformInfo.
Второе. Реализуйте эти интерфейсы в некотором классе. Оформлять этот класс специальным образом не нужно:
class MyClass : IMsgBox, IPlatformInfo {
  // ...
}

Третье.  Импортируйте функцию из DLL через P/Invoke, указав MarshallAs(IDispatch):
[DllImport("bar")]
static extern void Foo([MarshallAs(UnmanagedType.IDispatch)] object obj)

По поводу обновления. Нет, вам не надо реализовывать IUnknown самостоятельно, так же как и IDispatch. Эти интерфейсы будут реализованы средой.

