Как передать 2 строковых списка в C ++ из C # через COM? - PullRequest
2 голосов
/ 25 июня 2009

Мне нужно передать списки строк в неуправляемый c ++, как я могу это сделать?

Я использовал IDictionary в качестве метода возврата типа и отправки через com, но это не работает. Как этого добиться?

То, что я написал в C#, выглядит следующим образом -

IDictionary<string,string> postNames()
{
  IDictionary<string,string> post=Dictionary<string,string>();
  post.Add("Raj");
  post.Add("Mahesh");
  post.Add("john steek");

  return post;  
}

Затем я создал dll для этого класса, содержащего этот метод.

Теперь, как я могу получить доступ к этим значениям в неуправляемом C ++ ....

Я беспокоюсь о двух вещах

1) О типе возвращаемого значения для переноса этих значений в c ++

2) Можно ли использовать таким образом ..

Любая помощь в этом отношении?

Ответы [ 3 ]

1 голос
/ 25 июня 2009

Быстрый грязный метод - написать оболочку C ++ / CLI.

0 голосов
/ 25 июня 2009

Вероятно, самый простой способ - передать строку [] и использовать ее на неуправляемой стороне как тип SAFEARRAY (BSTR). Вы также можете передать строку [] и использовать ее в COM как LPStr [], используя MarshalAs (это пример в MSDN):

void FunctionCall([MarshalAs(UnmanagedType.LPARRAY, 
   ArraySubType= UnmanagedType.LPStr, SizeParamIndex=1)] 
   String [,] ar, int size );

Подробнее см. Маршалинг по умолчанию для массивов .

0 голосов
/ 25 июня 2009

Это, по сути, та же проблема, что и в этот вопрос . Вы можете реализовать совершенный ответ Earwicker здесь - объявите набор интерфейсов и классов доступа, которые обертывают Словарь, и открывают их для COM.

...