我有一个 C++ 函数:

std::map<std::string, std::string> foo(const std::vector<unsigned char>& v); 

Swig 生成以下 C# 函数:

MapStringString foo(SWIGTYPE_p_std__vectorT_unsigned_char_t v); 

我想在接收 byte[] 并返回 IDictionary 的 C# 函数中调用它,即:

IDictionary<string, string> bar(byte[] b) 
{ 
  SWIGTYPE_p_std__vectorT_unsigned_char_t b1; 
 
  // initialize b1 from b 
 
  MapStringString m = foo(b1); 
 
  IDictionary<string, string> result; 
 
  // Populate result from MapStringString 
 
  return result; 
} 

如何从 b 初始化 b1(即来自 byte[] 的 SWIGTYPE_p_std__vectorT_unsigned_char_t)以及如何从 MapStringString 填充 IDictionary?

提前致谢!

请您参考如下方法:

您可以在 SWIG 界面中使用类似的内容快速开始:

%include <std_vector.i> 
%template(VectorUChar) std::vector<unsigned char>; 

这应该为您提供一个可以在 C# 中使用的真实类型,它是 C++ std::vector 的代理。 (例如,它适用于您的 bar() 函数,但在调用时很难实现无缝)。

由于您实际上已经有了一个 Byte[] ,因此您可能可以组合一个类型映射,该类型映射可以从指针 + 长度透明地构造一个 vector (如果这更有用)。


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!