我有以下包装器将我的C ++代码公开给C#
extern "C" {
LIBRARY_API void GenerateTables(
const char* version,
const char* baseDir,
const char** fileList);
} // end extern "C"
void GenerateTables(
const char* version,
const char* baseDir,
const char** fileList)
{
std::string strVersion(version);
std::string strBaseDir(baseDir);
// I now need to convert my const char** to std::vector<std::string>
// so it can be passed to another internal method.
}
如何将const char** fileList
转换为std:vector<std::string>
。我对C ++比较陌生,这里有一个明显的内存分配问题。我可以做类似
std::vector<std::string> vec;
for (int i = 0; i < fileList.length() /* length() of what!? */; i++)
vec.push_back(/* what!? */);
如何进行必要的转换,是否有更好的方法可以通过互操作将C#中的字符串数组(string[]
)传递给C ++?
感谢您的时间。
答案 0 :(得分:1)
您需要以非管理代码的方式获取长度。有两种常用的方法:
任何一个选项都足够简单,您可以实现。选择完全取决于您的个人偏好。
如果您选择第一个选项,则可以像这样填充矢量:
std::vector<std::string> files(fileList, fileList + length);
如果您选择第二个选项,那么您将使用如下循环:
std::vector<std::string> files;
const char** filePtr = fileList;
while (*filePtr != nullptr)
files.push_back(*filePtr++);
答案 1 :(得分:1)
您需要知道fileList
数组的长度。知道后,您可以使用
fileList
size_t length = ... ;
std::vector<std::string> files( fileList, fileList + length );