Я конвертирую старый VB COM-объект (который я не писал) в C ++, используя ATL. Один из методов, согласно IDL, принимает IDispatch*
в качестве параметра, а документация и примеры для этого метода утверждают, что вы можете передать либо строку (которая является progid объекта, который будет создан и использован control) или IDispatch*
для объекта, который уже был создан. Как же я могу реализовать это в ATL?
Например, IDL:
[id(1)] HRESULT Test(IDispatch* obj);
Сэмплы (все они в формате JScript):
obj.Test("foo.bar");
или
var someObject = new ActiveXObject("foo.bar");
obj.Test(someObject);
Чтобы еще более усложнить ситуацию, фактический код VB, реализующий этот метод, фактически объявляет параметр 'obj' в виде строки! Однако, похоже, все работает.
Можете ли вы даже передать строку в метод COM, который принимает IDispatch*
? Если да, могу ли я определить, что IDispatch*
на самом деле строка в моем C ++ ATL-коде? Еще лучше, если это IDispatch
, который реализует определенный интерфейс, я захочу вызвать методы или создать экземпляр объекта, если это строка.
Любые идеи приветствуются!