我有一个 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 (如果这更有用)。






