作者luse (luse)
看板C_Sharp
标题Re: [问题] C#使用C++ dll之回传char
时间Wed Nov 14 02:50:08 2007
※ 引述《cole945 (躂躂..)》之铭言:
: ※ 引述《spursGM (沉默而伟大的球队)》之铭言:
: : 在C++ dll 程式概述如下:
: : char * test(void)
: : {
: : char testStr[]="Hello World!";
: : return *testStr;
: : }
: 这个写法就算在 C/C++ 都是错的呀 @_@
: 你的 return type 是 char*, 可是你却 return char
: 就算你是要 return testStr 的字串好了 (即 testStr),
: 可是该字串的内容是配置在 test 的 call stack中, 一但 return 就不该使用
这个例子 testStr 会被分配在STack上 可是 字串常数 "Hello World"不会
return testStr 不是一个很好的写法 but work well
下面的话 一般来说 其实让.NET自己 Marshaling
回 String(const char*) 或 StringBuilder(char *)
会比较好 至少 不要把 wchar 和 char 的问题带回 .NET 中 还是比较保险
: : static extern byte[] test(void);
: 在 .NET 中, char* 不能直接转成 byte[], 但 string 可以,
: 所以可以用两种写法
: 1. static extern IntPtr test(void);
: 再用 Marshal.PtrToStringXXX (XXX可以是Ansi,Unicode或Auto)
: 跟 IntPtr 有关的处理几乎都可以在 Marshal 找到~
: 2. static extern String test(void);
: 依情况使用, 不过 output 东西出来通常都建议用 IntPtr ..
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.168.218.184