У меня есть COM-объект, написанный на Delphi, который имеет свойство, которое возвращает вариант. В основном это свойство возвращает значение в зависимости от параметра, который я передаю. Когда я получаю доступ к объекту из VBA (например, в Excel), я могу написать что-то вроде:
MyObject.MyProperty("IntProperty") = 22
Теперь свойство также может возвращать объект IDispatch, который хранится в варианте. Если я получаю доступ к объекту com из Delphi, я пишу следующий код для извлечения этой информации IDispatch
var
Info : IMyInterface;
Info := IDispatch(TVarData(MyObject.MyProperty['InfoProperty']).VDispatch) as IMyInterface;
Info.foo := 10;
info.y := 'test';
info.saveit;
Можно ли извлечь эту информацию IDispatch в VBA? Я еще не нашел способ сделать это.
Чтобы очистить на 100%, свойство имеет тип OLEVariant, а не IDispatch. У меня есть свойства типа IDispatch, и они работают нормально.
Это объявление get_MethodProperty
function get_MethodProperty(const aPropertyName: WideString):OLEVariant;
Это сработало бы, если бы я объявил это как
function get_MethodProperty(const aPropertyName: WideString):IDispatch;
Но это не то, чего я хочу.
<Ч />
Это код VBA, и он не выполняется во второй строке
Dim Info as Object
Set Info = MyObject.MethodProperty("InfoProperty")
Info.foo = 10
Info.y = "test"
call info.saveit