Как передать аргумент IUnknown в интерфейс COM с помощью C#?
У меня интерфейс COM определен так
interface Client : IUnknown
{
[id(1)] HRESULT GetSomething
(
enum SomeID someID,
[out] IUnknown **pUnknown
);
};
Как я могу пройти IUnknown
объект с использованием C#?
2 ответа
Вы ничего не передаете, он возвращает указатель на интерфейс. Непрозрачный IUnknown реализован всеми интерфейсами COM. В C# это будет объект типа object, управляемая версия "может быть чем угодно". Итак, основной код выглядит так:
object retval;
client.GetSomething(SomeID.Magic, out retval);
И тогда вам нужно преобразовать возвращаемый объект в фактический тип интерфейса, вероятно, основанный на Magic. Ваш вопрос не дает никаких намеков на то, что это может быть, вам придется прочитать документацию по компоненту COM, чтобы иметь представление.
Предполагая, что вы ничего не знаете об объекте, вы, вероятно, использовали бы IntPtr для представления IUnknown, а затем получили бы RCW для него, используя Marshal.GetUniqueObjectForIUnknown:
// Get some object
IntPtr ptrObj = IntPtr.Zero;
Client.GetSomething(someID, out ptrObj);
object obj = Marshal.GetUniqueObjectForIUnknown(ptrIProfferService);