2015-11-10 32 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

相關問題