调用一个从C#中获取字符指针的C++函数
Calling a C++ function that takes a char pointer from C#
我不知道如何从C#向这个C++函数传递char*。
extern "C" __declspec(dllexport)
unsigned int extractSegment(char * startPoint, unsigned int sizeToExtract)
{
//do stuff
shared_ptr<std::vector<char>> content(new std::vector<char>(startPoint,startPoint+sizeToExtract));
//do more stuff
return content->size();
}
这个函数用于从文件中读取一个段,并对其进行一些二进制运算(为什么我使用字符向量)。startPoint是我想要读取的片段的起点。我无法更改此功能。
在C#中,我尝试将文件读取到byte[]数组中,并定义DllImport以使用StringBuilder,其中导出具有char*。我试着这样称呼它:
byte[] arr = File.ReadAllBytes(filename);
StringBuilder sb = new StringBuilder(System.Text.Encoding.Unicode.GetString(arr, startPoint,arr.Length - startPoiunt));
extractSegment(sb,200);
这导致SEHException。
char *
可以有几种不同的含义。在您的情况下,它似乎是一个预先分配并填充的字节数组,用作extractSegment
函数的输入参数。
等效的C#方法将采用byte[]
参数,即
[DllImport(...)]
public static extern int extractSegment(byte[] startPoint, uint sizeToExtract);
我使用byte[]
是因为您提到二进制操作,但是如果它实际上是一个字符串,那么您也可以按原样封送它,在DllImport
属性中设置正确的编码。
为了进一步了解,我现在能想到的char *
的其他可能选项是ref byte
、out byte
、ref char
、out char
或string
。另一方面,当调用函数分配并返回字符串时使用StringBuilder
,即char **
。
相关文章:
- constexpr 函数获取常量字符*
- 有没有办法通过使用十进制 ASCII 代码自动类型扣除来获取字符?
- 如何获取C++字符数据类型的地址
- 从格式化输入操作中获取读取字符数
- 如何从 QString 中包含的十六进制值中获取 ASCII 字符?
- 从我的 2DgridArray 中的文本文件中获取每个字符
- 如何将字符传递到find_child_by_attribute中以获取 pugixml
- 根据字符获取数组的索引
- C++ 获取向量中常量字符* [ ] 的长度
- 获取带有字符 X 的输入 X/X/etc 并用斜杠 / 分隔它
- 为什么我无法获取 MSVS2019 / C++ 中字符或uint8_t变量的内存地址?
- 如何从 c++ 中的给定标准输入中获取每个字符的偏移量?
- CPP:如何获取字符的最后一个索引
- 试图在重载函数中获取字符和字符串的输入
- 获取Unicode字符C++的十进制值
- 你能安全地从字符串的 c_str() 常量字符*中获取指向字符串的指针吗?
- 使用位于 C 字符串中的两个字符*获取子字符串
- 如何使用字符获取多个输入,使用 int 获取多个输出?C++
- c++列表字符获取问题,内存分配不好
- 从十六进制字符获取数据