Сигнатуры методов для setString и setXXX являются неполными в вашем примере кода, поскольку в нем не указано, возвращает ли он void или какой-либо другой тип данных.
Если setXXX возвращает void, попробуйте удалить круглые скобки вокруг параметра (ов) при вызове метода VBA, например:
service.setXXX complexClass
Пояснение:
В VBA не следует заключать аргументы субротажа в круглые скобки. Это можно легко проверить, создав подпрограмму с двумя параметрами и попытавшись вызвать ее, заключив аргументы в круглые скобки:
//C#
public void setXXX2(XXX val, XXX val2) { }
.
'VB
service.setXXX2 (complexClass, complexClass) 'Error
Возвращаясь к вашему примеру, когда вы заключили свой единственный аргумент в круглые скобки, вы создали выражение в скобках , которое оценивает простое значение данных - в данном случае типа String.
Вы можете убедиться, что вы добавили новый метод - который я назвал GetParameterType - в ваш класс для тестирования:
public class Service {
public void setString(String val) { }
public void setXXX(XXX val) { }
public void setXXX2(XXX val, XXX val2) { }
public string GetParameterType(object val) {
return val.GetType().Name;
}
}
Затем запустите метод, передав переменную напрямую, а затем переменную, заключенную в скобки.
MsgBox service.GetParameterType(complexClass) ' Returns XXX
MsgBox service.GetParameterType((complexClass)) ' Returns String