2015-11-10 31 views
0

我在C++ DLL导出函数:获得的char *从C++ DLL到C#应用程序

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总是管理enaugh内存的字符串来自infobuffer变量?

我在声明中写StringBuilder description,应该加ref吗?

回答

2

我的意思是将StringBuilder总是管理足够的内存来自信息到缓冲区变量的字符串?

你应该总是通过使用需要的能力的构造指定的StringBuilder的初始容量:

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

但我不过去了,也没有问题。为什么? – vico

+0

@vico字符串构建器具有初始容量(我不知道具体到底有多少),所以缓冲区可能已经足够大了。 – vcsjones

+0

并且在声明中我写'StringBuilder描述',我应该添加'ref' – vico

相关问题