如何通过COM从c#传递2个字符串列表到c ++?

时间:2009-06-25 13:51:43

标签: c# c++ visual-c++ com

我需要将字符串列表传递给非托管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 个答案:

答案 0 :(得分:1)

快速,脏的方法是编写C ++ / CLI包装器。

答案 1 :(得分:0)

这与this question中的问题基本相同。你可以在这里实现完美的Earwicker's answer - 声明一组包含Dictionary并将它们暴露给COM的接口和访问器类。

答案 2 :(得分:0)

可能最简单的方法是传递一个字符串[]并在非托管端使用它作为SAFEARRAY(BSTR)类型。您还可以使用MarshalAs传递字符串[]并将其作为LPStr []在COM中使用(这是MSDN上的示例):

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

有关详细信息,请参阅Default Marshaling for Arrays