正在将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
会一直管理从info
到buffer
变量的字符串的内存吗?
我在声明中写了StringBuilder description
,我应该添加ref
吗?
我的意思是StringBuilder会一直为从信息到缓冲区变量的字符串管理足够的内存吗?
您应该始终使用具有容量的构造函数来指定StringBuilder的初始容量:
int size = 256;
StringBuilder buffer = new StringBuilder(256);
fr = info(5, buffer, ref size);