Я определяю интерфейс на C#, который будет реализован в C#, но вызван из неуправляемого модуля C++ в качестве COM-объекта.Как показать аргументы метода интерфейса C# как конкретные типы COM/ODL?
Я знаю, что я хочу/нужен API C++, чтобы выглядеть и как я бы определить его с помощью ОЛЗ:
//args is an array of BSTR e.g VT_ARRAY|VT_BSTR
HRESULT DoMethod(/*[in]*/BSTR name, /*[in]*/VARIANT args);
я не уверен, как установить это в C#, чтобы вызвать TLB чтобы соответствовать этому, в отношении VARIANT
. Может быть, это так просто:
void DoMethod(string name, string args[])
Я искал вокруг COM/.NET Interop документации, но либо я пропустил раздел на этом, или просто не понимаю, что описывается!
Как в стороне, как я могу увидеть, какое определение COM выбрано для данного интерфейса C#? Является ли DLL/TLB легко проверенным? (Почему?)
Итак, объект <--> VARIANT, я нашел это документированным после того, как его спросили, но я еще не уверен, как создать этот объект для сортировки как подходящего варианта варианта? Не могли бы вы добавить (псевдо) реализацию 'DoMethod()'? Что касается варианта Vs safearray - наш первоначально проект на C++ всегда делал это так, а не пропускал голые safearrays. Я не мог сказать, почему, это почти 20 лет! –
Erm, не уверенный, как этот запрос может иметь смысл, это вызывающий, который должен создать массив и заполнить его в варианте. DoMethod() потребляет его. –
Да, ты прав. Хотя, если бы это был параметр out, мне все равно был бы интересен тот же самый основной вопрос, это не моя потребность прямо сейчас ... спасибо за это. –