将char *缓冲区作为StringBuilder传递给C#

时间:2015-09-09 19:20:04

标签: c# c++-cli marshalling stringbuilder c-strings

我有一个用char *缓冲区调用的C ++函数用于输出。现在我想用C#写它,所以我需要从C ++函数调用一个托管方法。我无法弄清楚的是如何将它作为StringBuilder传递。

我之前使用Robert Giesecke's Unmanaged Exports工作正常,并使用默认的字符串编组方案自动完成,但我想使用size参数作为StringBuilder的MaxCapacity。

有没有更好的方法来创建一个新的StringBuilder实例,写入它,获取带有ToString()的CLR字符串,然后将内容复制到缓冲区?有问题的字符串可能长达10,000个字符,我不太喜欢每次复制两次的想法。

C#

public static void MyMethod(StringBuilder buffer)
{
    //...
}

C ++ / CLI

extern "C" __declspec(dllexport)
void __stdcall MyFunction(char* buffer, int length)
{
    MyNamespace::MyClass::MyMethod( /* ? */ );
}

1 个答案:

答案 0 :(得分:0)

  1. 使用GET /3.0/projects/<project_name>/queries/saved HTTP/1.1 HOST: api.keen.io authorization: <your_key> content-type: application/json 然后c ++ 8位字符数组将正确对齐。

  2. 我更喜欢做类似的事情,因为我将它用于非托管代码:

    byte []