Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C+获取char*+;DLL到C#应用程序_C#_C++ - Fatal编程技术网

从C+获取char*+;DLL到C#应用程序

从C+获取char*+;DLL到C#应用程序,c#,c++,C#,C++,我在C++ dll中导出函数: extern "C" int _stdcall info(int aError, char * description, int *aLen) 试图从C#应用程序调用它 宣布: [DllImport("mydll.dll", CallingConvention = CallingConvention.StdCall)] public static extern int info(int aError, StringBuilder description, r

我在C++ dll中导出函数:

extern "C" int _stdcall info(int aError, char * description, int *aLen)
试图从C#应用程序调用它

宣布:

[DllImport("mydll.dll", CallingConvention = CallingConvention.StdCall)] public static extern int info(int aError,   StringBuilder description, ref int length);
电话:

StringBuilder buffer = new StringBuilder();
fr = info(5, buffer, ref 256);
从第一个角度看,这似乎是可行的。但它真的安全吗?我的意思是
StringBuilder
是否会始终为从
info
buffer
变量的字符串管理足够的内存

我在声明中写入
StringBuilder说明
,是否应添加
ref

我的意思是,StringBuilder是否会始终为从info到buffer变量的字符串管理足够的内存

您应始终使用获取容量的构造函数指定StringBuilder的初始容量:

int size = 256;
StringBuilder buffer = new StringBuilder(256);
fr = info(5, buffer, ref size);

但我没有通过考试,也没有问题。为什么?@vico字符串生成器有一个初始容量(我不知道确切的容量),因此缓冲区可能已经足够大了。在声明中,我写了“StringBuilder描述”,我是否应该添加“ref”否,StringBuilder已经是一个引用类型,默认情况下被封送为[in,Out]。使用ref将意味着本机类型是
char**
@OguzOzgul I通过ref固定了常量,就像这样只是为了说明。StringBuilder的“自动调整大小”在用于平台调用时并不重要——内部缓冲区必须足够大,以满足本机被调用方的期望。