正在将char*从C++DLL获取到C#应用程序

本文关键字:获取 应用程序 C++DLL char | 更新日期: 2023-09-27 18:21:30

我在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会一直管理从infobuffer变量的字符串的内存吗?

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

正在将char*从C++DLL获取到C#应用程序

我的意思是StringBuilder会一直为从信息到缓冲区变量的字符串管理足够的内存吗?

您应该始终使用具有容量的构造函数来指定StringBuilder的初始容量:

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