1
我有一个C++函数,用一个char *缓冲区调用以用于输出。现在我想用C#写信给它,所以我需要从C++函数调用托管方法。我无法弄清楚的是如何将它作为StringBuilder传递。将char *缓冲区作为StringBuilder传递给C#
我以前使用Robert Giesecke's Unmanaged Exports哪些工作正常,并使用默认字符串编组方案自动执行此操作,但是我想为StringBuilder的MaxCapacity使用size参数。
有没有比创建一个新的StringBuilder实例,写入它,得到一个CLR字符串ToString()
,然后将内容复制到缓冲区更好的方法吗?有问题的字符串可能只有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(/* ? */);
}
你必须将它复制* *无论如何,因为.NET串由16 bit宽字符,你的函数使用8位'char'。你*有*在某些时刻将其转换为8位。 –