Когда вы импортируете tlb в VC ++ и компилируете, в вашем промежуточном каталоге создается промежуточный файл с расширением .tlh (обычно это каталог отладки / выпуска в зависимости от вашей текущей конфигурации). Это своего рода прокси-файл и содержит все методы, которые вы можете вызвать. Посмотрите на этот файл, и он даст вам точный синтаксис того, что должно быть передано.
Что касается вашего метода GetList2, он возвращает простую строку, которая преобразуется в BSTR в сгенерированном tlb, поэтому вам необходимо получить возвращаемое значение в BSTR. Для GetList3, поскольку вы возвращаете массив, поэтому, скорее всего, тип возвращаемого значения в файле .tlh будет вариантом, содержащим массив BSTR. Вероятнее всего, vt варианта будет VT_ARRAY | VT_BSTR. Вы можете пройти через этот массив в варианте и получить все значения по одному.
РЕДАКТИРОВАТЬ: Как кто-то еще предположил, что это List <>, поэтому он не будет переведен в тип COM. ИМО, ваш лучший вариант - использовать ArrayList вместо List <>
Другое редактирование: я только что проверил, и ArrayList не переводится ни на один из типов автоматизации COM. В этом случае лучше всего использовать простой строковый массив, привести его к объекту и вернуть этот объект из вашего метода. Этот объект будет преобразован в вариант, содержащий SafeArray BSTR. Вам нужно будет перебрать этот защитный массив, чтобы получить ваши данные.